amp*_*amp 4 validation model asp.net-mvc-4
我有这样的局部视图(简化):
@model Portal.Models.LoginModel
<div class="login-container k-block">
    <section id="login-form" class="">
        @using (Html.BeginForm(actionName, controllerName, new { ReturnUrl = ViewBag.ReturnUrl }))
        {
            @Html.AntiForgeryToken()
            @Html.ValidationSummary(true)
            <fieldset id="login-form-list-items">
                <ol>
                <li>
                    @Html.LabelFor(m => m.CardNumber)
                    @Html.TextBoxFor(m => m.CardNumber, new { @class="k-textbox"})
                    <div class="k-error-colored">
                        @Html.ValidationMessageFor(m => m.CardNumber)
                    </div>
                </li>
                <li>
                    @Html.LabelFor(m => m.Pin)
                    @Html.PasswordFor(m => m.Pin, new { @class="k-textbox"})
                    <div class="k-error-colored">
                        @Html.ValidationMessageFor(m => m.Pin)
                    </div>
                </li>
                <input id="login-input-submit" class="k-button" type="submit" value="Enter" />
            </fieldset>
</div>
在我login看来,我把这个局部视图称为:
@model Portal.Models.LoginModel
@Html.Partial("_LoginFormNoRegistration", Model, new ViewDataDictionary { { "actionName", "Login" }, { "controllerName", "Account" } })
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
问题是,当login控制器中的方法添加如下错误:
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        //...
        // If we got this far, something failed, redisplay form
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        return View(model);
    }
验证摘要中未显示该消息...我不明白为什么......可能是什么问题?有些javascript库不见了吗?
更新
我还发现作为novalidate属性集生成的表单:
<form action="/" method="post" novalidate="novalidate">
//...
</form>
我不知道为什么.
amp*_*amp 10
我发现了这个问题.
我在RenderPartial中传递了一个新的ViewData,它覆盖了父视图的ViewData,因此模型状态丢失了,如下所述:在传播ModelState错误时将附加ViewData传递给ASP.NET MVC 4部分视图.
将主视图更改为:
@model Portal.Models.LoginModel
@{
    ViewData.Add("actionName", "Login");
    ViewData.Add("controllerName", "Account");
    Html.RenderPartial("_LoginFormNoRegistration", Model, ViewData);
}
@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
}
诀窍!
此外,如果要在模型中显示模型的常规错误消息validationsummary,请确保使用空字符串作为键添加错误:
ModelState.AddModelError("error", "The user name or password provided is incorrect.");- 不起作用
ModelState.AddModelError("", "The user name or password provided is incorrect.");- 工作
| 归档时间: | 
 | 
| 查看次数: | 7938 次 | 
| 最近记录: |