来自控制器的错误未在 MVC 中查看

Posted

技术标签:

【中文标题】来自控制器的错误未在 MVC 中查看【英文标题】:error from the controller not coming to view in MVC 【发布时间】:2015-01-27 14:26:02 【问题描述】:
    if (user.UserName == DbData.UserName && DbData.Password.Equals(user.Password, tringComparison.CurrentCultureIgnoreCase))
                
                   //redirect to main page //this is working fine


    else 
      ModelState.AddModelError("Error", "Username/Password not matching");
   ViewBag.Message = ModelState["Error"].Errors[0].ErrorMessage;
  return View();
    

在视图中我写了

@if(ViewBag.Message != null)

ViewBag.Message

但是视图包中的错误没有出现在视图中

【问题讨论】:

ModelState 在您返回 View 时被丢弃,因为您没有将模型传递给它 -- TempData["Error"] 有值吗? “用户名/密码不匹配”这个字符串会在那里 【参考方案1】:

这很正常,如果您在即时窗口中检查 TempData["Error"],您会看到它为空。 你需要给视图包一些东西才能在视图侧得到一些东西。

更新: 这会给你你的信息( “用户名/密码不匹配”),您可以将其设置为 ViewBag。

ModelState["Error"].Errors[0].ErrorMessage

希望这能解决您的问题。

供您参考: ModelStateDictionary.AddModelError 方法(字符串,异常): 将指定的模型错误添加到与指定键关联的模型状态字典的错误集合中。 来自ModelState.AddModelError

更新: 要在 View 中显示消息,请在 ViewBag.Message 之前使用 @ 符号

@if (!string.IsNullOrWhiteSpace(ViewBag.Message))

@ViewBag.Message

【讨论】:

@html.Raw(ViewBag.Error);这没有显示视图中的值 请删除这个:ViewBag.error = TempData["Error"];并替换为 ViewBag.error = "Plain text";然后让我们知道 ViewBag 是否仍然是空的。正如我在上面的回答中所说,您没有在 ViewBag 中设置正确的值。如果视图中显示“纯文本”,则尝试提供我上面描述的 modelState 错误。祝你好运! 如果我的回答对你有帮助,请将其标记为答案并投票给它。谢谢 我正在通过它获取数据,但查看 Viewbag 中的数据未呈现 在视图中的这一行放置一个断点:@if(ViewBag.Message != null) 然后在即时窗口中写下 this:ViewBag.Message 并回车。告诉我显示的值是多少。

以上是关于来自控制器的错误未在 MVC 中查看的主要内容,如果未能解决你的问题,请参考以下文章

基类中的 ExecuteCore() 未在 MVC 4 beta 中触发

报告查看器 Web 控制 HTTP 处理程序未在应用程序的 web.config 文件中注册

ajax 将 null 发送到 MVC Api 控制器

如何从 mvc 控制器获取列表以使用 jquery ajax 查看

Jquery 对话框未在 aspnet MVC 中加载

图像,CSS和JS未在MVC4应用程序中加载