【问题标题】:ASP.NET MVC 4 Validation Errors not being displayed未显示 ASP.NET MVC 4 验证错误
【发布时间】:2013-05-06 05:58:40
【问题描述】:

我正在使用 ASP.NET MVC 4。

我认为我的 ModelState 没有正确传递,

控制器动作:Home/EnrolResult如下:

[HttpPost]
public ActionResult EnrolResult(UploadModel model)
{
    if (ModelState.IsValid)
    {
        // my codes in here
        return View();
    }
    return View("~/Views/Home/Index", model);
}

视图:首页/索引,如下:

@using (Html.BeginForm("EnrolResult", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{ 
    @Html.ValidationSummary()

    @Html.LabelFor(m => m.Firstname)
    @Html.TextBoxFor(m => m.Firstname)

    @Html.LabelFor(m => m.Surname)
    @Html.TextBoxFor(m => m.Surname)

    <li data-role="fieldcontain">
        <input type="submit" value="Enrol" />
    </li>
}

当我正确输入详细信息时,它会正常运行并显示 enrolresult 视图。

当我输入错误的详细信息时,它会返回主页/索引,但不会显示未输入哪个表单的验证错误。

模型设置正确,因为我已经对其进行了测试,其中我将 EnrolResult 操作更改为索引操作并且正确显示了验证错误,我使用了 view(model),这意味着不必像我一样传递 ModelState我正在尝试在这种情况下做。

我的做法正确吗?我见过有人使用 TempData,但我认为这种方法是可行的?

【问题讨论】:

  • 为什么不直接将模型返回到视图中?您是否也必须返回 URL? IE。你试过返回吗(查看模型);它不起作用?
  • 输入表单信息的视图是home/index,但是控制器动作和结果视图是EnrolResult。简单地放 return View(model) 将显示 EnrolResult 而不是将它们指向他们应该正确输入信息到表单的视图。
  • 您的视图页面中是否包含验证 javascript?
  • 发帖到EnrolResult 的观点是您在问题中向我们展示的观点?我希望不是因为它清楚地表明您正在发布到home.Index。这就是您没有收到验证消息的原因,因为 home.index 视图与您用于发布的视图不同。
  • 如果设置为true,可以试试Html.ValidationSummary(false)。

标签: asp.net-mvc validation


【解决方案1】:

缺少验证消息助手:

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{ 
    @Html.ValidationSummary()

    @Html.LabelFor(m => m.Firstname)
    @Html.TextBoxFor(m => m.Firstname)
    @Html.ValidationMessageFor(m => m.Firstname)

    @Html.LabelFor(m => m.Surname)
    @Html.TextBoxFor(m => m.Surname)
    @Html.ValidationMessageFor(m => m.Surname)

    <li data-role="fieldcontain">
        <input type="submit" value="Enrol" />
    </li>
}

编辑:

如果您不想使用ValidationMessageFor,我相信您需要使用不同的 Html.ValidationSummary(false) 重载。如果我没记错的话,ValidationSummary 的默认行为会隐藏属性级错误以避免重复。

【讨论】:

  • 更新了我的答案以显示如何使用属性级错误消息启用ValidationSummary()
  • 原来解决方案是一个相当基本的解决方案,在return View("~/Views/Home/Index", model); 中它需要是index.cshtml 而不是简单的index
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多