【问题标题】:ViewBag In ASP.NET MVCASP.NET MVC 中的 ViewBag
【发布时间】:2013-06-28 12:38:19
【问题描述】:

我通过ViewBag 传递我的模型错误。在我的控制器中,我将一个包含值(_modelErrors)的List<string> 传递给ViewBag,然后我试图在我的视图中显示它。当我在视图中调试时,我的 ViewBag 确实包含一个带有值的 _modelErrors 字典,但我的错误没有被呈现。

来自我的控制器:

ViewBag._modelErrors = _modelErrors;

在我看来,我已经尝试了所有这些方法,但没有呈现任何标记。

@try
{
    foreach (string er in ViewBag._modelErrors)
    {
        Response.Write(er.ToString());
        @Html.DisplayText(er) 
        @Html.DisplayText(er.ToString()) 
        @er.GetType()
        @er.ToString();
        er.ToString();
    }
}
catch(Exception e){}

【问题讨论】:

    标签: asp.net-mvc razor viewbag


    【解决方案1】:

    这是一个肮脏的代码,伙计!看看@Html.ValidationSummary和@Html.ValidationMessageFor

    好吧,这里有一些代码可以澄清一些事情:

    [HttpPost]
    public ActionResult MyAction(ModelClass inputModel)
    {       
        if (ModelState.IsValid)
        {
            //for example we're trying to save our data to db
            var result = _myRepository.saveStuff(inputModel);
    
            if (result)
                return RedirectToAction("someAction");
    
            ModelState.AddModelError(string.Empty, "An error occured, check input data");           
        }       
        return View(inputModel);
    }
    

    您还可以指定键(这是您的模型字段名称)而不是 string.Empty -> 这样您会在指定字段下看到错误消息(默认情况下),但基本上人们所做的是从验证摘要中排除属性错误(@Html.ValidationSummary(true)) - 所以你只会在那个领域得到一般错误。希望对你有帮助

    【讨论】:

    • 我知道是的。我的大部分视图使用 Html.ValidationMessageFor 都可以正常工作,但在这种情况下我需要使用 ViewBag。
    • 这是个好建议;您能否扩展您的答案以帮助 OP 解决他的问题?也许执行你认为他应该做的?
    • @BillGreer 添加了代码。您将在 @Html.ValidationSummary 生成标记处看到您手动添加到 ModelState 的错误。如果您不清楚,请告诉我
    【解决方案2】:

    使用这个:

    (string er in (List<string>)(ViewBag._modelErrors))
    

    但有人说这是不好的做法。以这种方式捕获异常也是非常错误的......

    【讨论】:

    • “包含一个带有值的 _modelErrors 字典”。也许您的意思是将其转换为IDictionary&lt;String,String&gt;? (除非我对措辞读得太远,从 OP 显示的示例来看,我可能是;p)
    • 我现在不输入他放在 viewbag 中的对象。在示例中,我没有看到任何提及键/值等字典属性。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 2017-05-04
    • 1970-01-01
    相关资源
    最近更新 更多