我有一个带有一些控件的表单。表单上有一个按钮,用于加载局部视图。在局部视图内,有两个必需的字段文本框和一个按钮。单击它时,我需要仅为部分视图内的文本框显示错误消息,而不是实际表单中的字段。当我点击表单的提交按钮时,必须显示所有错误消息。
加载部分视图后,我将重新初始化验证插件,如下所示。
$('#test').removeData("validator");
$.validator.unobtrusive.parse('#test');
我尝试使用下面线程中描述的验证属性,但它不起作用。也许它适用于正常加载的视图。
ASP.NET MVC Validation Groups?
但是,我可以通过调用textbox1.valid()和textbox2.valid()来单独验证。但我认为我缺少标准的做法。任何帮助表示赞赏。
答案 0 :(得分:0)
您可以使用Ajax.BeginForm()
提交部分视图来完成此操作//In Partail View
@model SomeModel
@using(Ajax.BeginForm(“SomeActionName”,new AjaxOptions {HttpMethod =“POST”,UpdateTargetId =“targetId”})) {
@Html.EditorFor(mode=>model.FirstText)
@Html.EditorFor(mode=>model.SecText)
<input type="submit" value="save">
}
//In Controller
public ActionResult SomeAction(SomeModel model)
{
return PartaiulView(model);
}
在这里,您可以验证您的部分视图 注意:当您使用Ajax.BeginForm提交表单时,必须指定“ UpdateTargetId ”,其中您的结果将显示在View上。
//In View
<div id="targetId">
@Html.Partail("PartialView")
</div>
如果您希望在模型有效时重定向到其他操作,则修改您的操作
public ActionResult SomeAction(SomeModel model)
{
if(ModelState.IsValid)
{
return Json(new {redirect = @Url.Action("SomeAction","SomeController")})
}
return PartaiulView(model);
}
然后在partail视图中,您可以调用Ajax.BeginForm的 OnSuccess 方法
@using (Ajax.BeginForm("SomeActionName", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "targetId",OnSuccess="success"}))
{
}
<script type="text/javascript">
function success(data)
{
if(data.redirect)
{
windows.location = data;
}
}
</script>
检查哪一种适合你。