Mvc 模型验证错误在部分视图在另一个视图内时不显示
Mvc Model Validation Errors Not Showing when partial view Inside The another view
当我尝试直接在浏览器中加载部分视图并提交时显示错误消息,但如果同一部分视图在另一个视图中,则不会显示模型错误验证。在我使用 Ajax.Beginform 方法的视图中加载部分视图。
在浏览器中加载局部视图时
当包含在另一个视图中时
我的部分观点
@model FPW.FPWClientModels.SiteClientModel
@if (this.ViewContext.FormContext == null)
{
this.ViewContext.FormContext = new FormContext();
}
@using (Ajax.BeginForm("CreateSite", "Site", null, new AjaxOptions
{
HttpMethod = "POST",
AllowCache = false,
////LoadingElementId = "AjaxOverlay",
//OnSuccess = "SiteOnSaveSuccess",
//OnFailure = "SiteOnSaveFailure",
}, new { @id = "SiteCreateForm" }))
{
<div class="modal-body">
@Html.AntiForgeryToken()
<div class="form-group">
@Html.LabelFor(model => model.SiteName, htmlAttributes: new { @class = "control-label" })
<div class="col-md-12">
@Html.EditorFor(model => model.SiteName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.SiteName, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SiteAddress, htmlAttributes: new { @class = "control-label" })
<div class="col-md-12">
@Html.EditorFor(model => model.SiteAddress, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.SiteAddress, "", new { @class = "text-danger" })
</div>
</div>
<div class="modal-footer">
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<script>
function SiteOnSaveSuccess(resp) {
}
function SiteOnSaveFailure(resp) {
}
</script>
我的控制器
public ActionResult CreateSite()
{
SiteClientModel oSiteClientModel = new SiteClientModel();
return PartialView(oSiteClientModel);
}
//Create Site
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateSite(SiteClientModel oSiteClientModel)
{
if (ModelState.IsValid)
{
var saveSiteDetails = oSiteApiController.CreateSiteDetails(oSiteClientModel);
return PartialView(saveSiteDetails);
}
else
{
oSiteClientModel.ReturnValue = new ReturnValue { IsSuccess = false, ReturnType = ReturnType.Error, Message = "Form Not Valid" };
}
return PartialView("CreateSite",oSiteClientModel);
}
发现错误。 ajax 选项中未使用更新目标 ID。使用 UpdateTargetId 并将其指向表单 ID 后,它按预期正常工作
当我尝试直接在浏览器中加载部分视图并提交时显示错误消息,但如果同一部分视图在另一个视图中,则不会显示模型错误验证。在我使用 Ajax.Beginform 方法的视图中加载部分视图。
在浏览器中加载局部视图时
当包含在另一个视图中时
我的部分观点
@model FPW.FPWClientModels.SiteClientModel
@if (this.ViewContext.FormContext == null)
{
this.ViewContext.FormContext = new FormContext();
}
@using (Ajax.BeginForm("CreateSite", "Site", null, new AjaxOptions
{
HttpMethod = "POST",
AllowCache = false,
////LoadingElementId = "AjaxOverlay",
//OnSuccess = "SiteOnSaveSuccess",
//OnFailure = "SiteOnSaveFailure",
}, new { @id = "SiteCreateForm" }))
{
<div class="modal-body">
@Html.AntiForgeryToken()
<div class="form-group">
@Html.LabelFor(model => model.SiteName, htmlAttributes: new { @class = "control-label" })
<div class="col-md-12">
@Html.EditorFor(model => model.SiteName, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.SiteName, "", new { @class = "text-danger" })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.SiteAddress, htmlAttributes: new { @class = "control-label" })
<div class="col-md-12">
@Html.EditorFor(model => model.SiteAddress, new { htmlAttributes = new { @class = "form-control" } })
@Html.ValidationMessageFor(model => model.SiteAddress, "", new { @class = "text-danger" })
</div>
</div>
<div class="modal-footer">
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<script>
function SiteOnSaveSuccess(resp) {
}
function SiteOnSaveFailure(resp) {
}
</script>
我的控制器
public ActionResult CreateSite()
{
SiteClientModel oSiteClientModel = new SiteClientModel();
return PartialView(oSiteClientModel);
}
//Create Site
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult CreateSite(SiteClientModel oSiteClientModel)
{
if (ModelState.IsValid)
{
var saveSiteDetails = oSiteApiController.CreateSiteDetails(oSiteClientModel);
return PartialView(saveSiteDetails);
}
else
{
oSiteClientModel.ReturnValue = new ReturnValue { IsSuccess = false, ReturnType = ReturnType.Error, Message = "Form Not Valid" };
}
return PartialView("CreateSite",oSiteClientModel);
}
发现错误。 ajax 选项中未使用更新目标 ID。使用 UpdateTargetId 并将其指向表单 ID 后,它按预期正常工作