【问题标题】:Showing Validation Errors using MVC使用 MVC 显示验证错误
【发布时间】:2015-12-14 22:59:42
【问题描述】:

我一直在尝试使用 MVC 的固有验证框架来显示验证错误。我正在为我的控制器使用以下代码:

[HttpPost]
        public ActionResult SaveApplication(ApplicationModel application)
        {
            if (!ModelState.IsValid)
            {                   
                return View("New",application);
            }

            ApplicationBLL.SaveApplication(application);
            return Content(string.Empty);
        }

虽然我的观点看起来像:

<tr>
        <td>Name</td>
        @Html.ValidationSummary(true)
        <td>@Html.TextBoxFor(m => m.Name)</td>
        <td>@Html.ValidationMessageFor(m => m.Name, "Name is required")</td>
    </tr>

下面是模型类的样子:

public class  ApplicationModel
    {
        public int ApplicationId { get; set; }

        public string ApplicationNumber { get; set; }

        [Required]
        public string Name { get; set; }

        public DateTime EventDate { get; set; }

        public string EventAddress { get; set; }
}

我的模型对 name 属性进行了 [Required] 验证,当我将调试器放在控制器上时,它识别出 ModelState 无效并返回视图,但我没有看到任何我的页面上的错误。因为这是我第一次使用 MVC 的验证框架,所以我可能遗漏了一些非常琐碎的事情。

我想补充一点,我用 Ajax Post 调用 Controller 会导致这种异常吗?

【问题讨论】:

  • 不确定您的要求。您已经在视图中指定了验证消息(如“需要名称”),这就是将要显示的内容。您是否希望显示“这是一个测试”?
  • 我删除了添加自定义错误的控制器代码。感谢您指出,这令人困惑。我的问题是,当我期望验证失败错误至少应显示在页面上的某个位置时,视图上没有显示任何内容
  • [Required(ErrorMessage = "Name is required")] public string Name { get; set; } 装饰您的财产在视图中仅使用@Html.ValidationMessageFor(m =&gt; m.Name),在控制器中仅使用if (!ModelState.IsValid) { return View(application); }。如果您在 Name 控件中提交没有文本的表单,您将看到错误消息(并且如果启用了客户端验证并包含脚本 - 将显示该消息并且它甚至不会提交)
  • 请向我们展示您的ApplicationModel viewmodel 课程。
  • @dai:添加了您要求的代码

标签: .net asp.net-mvc validation asp.net-mvc-4 modelstate


【解决方案1】:
<td>@Html.ValidationMessageFor(m => m.Name, "Name is required")</td>

此辅助方法生成一个具有以下属性的跨度:

data-valmsg-replace="false"

意味着您将在字段下方看到静态错误消息,但您将无法使用模型中定义的错误消息更改该字段。同样,您会在您的字段下看到一些静态错误消息。 如果@stephen muecke 的解决方案有效,则意味着您的问题不在于将 ErrorMessage 添加到错误的位置。我在您的代码和@stephen 的答案之间看到的唯一区别是

return View("New",application);

改为

return View(application);

这意味着您可能从 Action 返回了错误的视图。

【讨论】:

  • 我的视图名称是“New”,所以我必须返回 View("New",application);。它还加载了我通过在此处放置一个断点来确认的视图。所以它正在加载正确的视图+具有无效模型状态的模型。我仍然没有看到错误
  • 另外,我正在使用 Ajax 调用 Controller。会不会是因为这个?
  • @CoffeeBean 您对表单发布操作使用哪种语法? jquery $.ajax() 或 Razor Ajax.BeginForm() ?
【解决方案2】:

试试这个,

在您的操作中添加模型错误

 ModelState.AddModelError("keyName","Error Message");

使用它在视图中显示

  @Html.ValidationMessage("keyName")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-18
    • 1970-01-01
    • 1970-01-01
    • 2014-09-23
    相关资源
    最近更新 更多