我正在尝试使用 Ajax.BeginForm 将数据发布到控制器。如果出现特定错误,表单应重新呈现并显示添加到 ModelState 的自定义错误消息。由于某种原因,错误消息未显示。我什至正在尝试以下不起作用的测试用例,我是否遗漏了什么?
Edit.cshtml:
@using (Ajax.BeginForm("Edit", "UserInformation", FormMethod.Post, new AjaxOptions { HttpMethod = "Post", InsertionMode = InsertionMode.Replace, UpdateTargetId = "divFormContainerMain", LoadingElementId = "divPreLoader", OnSuccess = "onSuccess" }))
{
<div id="divPreLoader" style="display:none; text-align: center"><img src="@Url.Content("~/Content/images/preLoader.gif")" alt="" /></div>
<div id="divFormContainerMain">
@Html.Partial("_EditPartialView", Model)
</div>
<div class="buttonContainerBottom">
<span class="buttonContainerInner">
<input type="submit" id="btnSave" name="buttonPress" value="save" class="orangeButton" />
</span>
</div>
}
_EditPartialView.cshtml:
@Html.ValidationSummary(false)
<div id="divFormContainerUserInformation" class="formContainer">
<div class="labelContainer">
@Html.LabelFor(m => m.UserName)
</div>
<div class="elementContainer">
@Html.TextBoxFor(m => m.UserName, new { style = "width: 200px" })
@Html.ValidationMessageFor(m => m.UserName)
</div>
<div class="labelContainer">
@Html.LabelFor(m => m.Name)
</div>
<div class="elementContainer">
@Html.TextBoxFor(m => m.Name, new { style = "width: 200px" })
@Html.ValidationMessageFor(m => m.Name)
</div>
<div class="labelContainer">
@Html.LabelFor(m => m.EmailAddress)
</div>
<div class="elementContainer">
@Html.TextBoxFor(m => m.EmailAddress, new { style = "width: 200px" })
@Html.ValidationMessageFor(m => m.EmailAddress)
</div>
.
.
.
.
.
.
</div>
UserController:
[HttpPost]
public ActionResult Edit(UserModel userModel)
{
ModelState.AddModelError("", "This is a test");
return PartialView("_EditPartialView", userModel);
}
你的脚本添加到哪里了?在 _layout.cshtml 中还是在视图本身中?您如何加载视图?是用ajax请求来显示部分视图吗?
如果您通过 ajax 加载部分视图或作为部分视图加载,则可能是部分视图尚未加载到 jquery DOM 模型树中。
我会尝试以下方法。改变
<div id="divFormContainerMain">
@Html.Partial("_EditPartialView", Model)
</div>
to
<div id="divFormContainerMain">
@Html.Partial("_EditPartialView", Model)
<script src="/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
</div>
or
<div id="divFormContainerMain">
@Html.Partial("_EditPartialView", Model)
@Scripts.Render("~/bundles/jqueryval") //if you have a bundle for it
</div>
无论如何,我的建议是仅在需要时加载验证脚本和不引人注目的脚本,而不是在 _layout.cshtml 页面中加载它们。
另外不要忘记在 web.config 中启用以下 appSettings
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)