C# asp.net Twitter引导TempData.Add(添加两个错误时出现Alerts.Error错误

C# asp.net Twitter引导TempData.Add(添加两个错误时出现Alerts.Error错误,c#,asp.net,asp.net-mvc,asp.net-mvc-3,twitter-bootstrap,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Twitter Bootstrap,我正在使用用于MVC的twitter引导nuget包 在发布到控制器并检查错误时,如果我的模型中有多个错误,则在尝试向TempData添加第二个警报时会出现以下错误: 已添加具有相同密钥的项。 // // POST: /Customer/Create [HttpPost] [ValidateAntiForgeryToken] public ActionResult Create(Customer customer) { var er

我正在使用用于MVC的twitter引导nuget包

在发布到控制器并检查错误时,如果我的模型中有多个错误,则在尝试向TempData添加第二个警报时会出现以下错误:

已添加具有相同密钥的项。

    //
    // POST: /Customer/Create
    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create(Customer customer)
    {
        var errors = ModelState.Values.SelectMany(v => v.Errors);
        if (ModelState.IsValid)
        {
            // save to database etc
            // redirect to action
        }
        foreach (var c in errors)
        {
            TempData.Add(Alerts.ERROR, c.ErrorMessage);  // Error is reported here
        }
错误消息不同,如下所示-因此必须是Alerts.error只允许出现一次:

有没有办法将两个
警报。错误
错误消息添加到
TempData
——或者我应该只连接一个字符串,然后用组合的错误消息添加一个错误

如果我将TempData代码更改为:

TempData.Add(Alerts.ERROR,errors.Select(c=>c.ErrorMessage.ToArray());

…视图呈现为:

谢谢,


标记为什么不直接使用
TempData.Add(Alerts.ERROR,errors.Select(c=>c.ErrorMessage.ToArray())
并在视图中迭代错误?

TempData
是一个字典,因此尝试添加重复键会导致异常是有意义的。根据显示
TempData
内容的方式,您可以将错误消息串接成一个字符串,或者使用具有
Guid
附加的键对其进行加密(从而使密钥每次都是唯一的)

一种可能的解决方法(在循环中):


这天真地假设您之前已经格式化了错误消息,并将生成一个长字符串。如果您使用
来显示错误,您可以将每个错误消息包装在
  • 中,然后进行压缩。

    嗨-谢谢-我尝试过,但视图中只显示System.string[](我在帖子中添加了一个屏幕截图)。是的--您需要迭代错误,例如:
    if(TempData[Alerts.ERROR]!=null&&TempData[Alerts.ERROR].Length>0){foreach(TempData[Alerts.ERROR]中的字符串消息]{@message}
    if (TempData.ContainsKey(Alerts.ERROR))
    {
        string temp = TempData[Alerts.ERROR].ToString();
        TempData[Alerts.ERROR] = string.Concat(temp, c.ErrorMessage);
    }
    else
    {
        TempData.Add(Alerts.ERROR, c.ErrorMessage);
    }