仅验证ajax加载的局部视图

时间:2012-09-27 02:21:23

标签: asp.net-mvc-3 unobtrusive-validation asp.net-mvc-validation

我有一个带有一些控件的表单。表单上有一个按钮,用于加载局部视图。在局部视图内,有两个必需的字段文本框和一个按钮。单击它时,我需要仅为部分视图内的文本框显示错误消息,而不是实际表单中的字段。当我点击表单的提交按钮时,必须显示所有错误消息。

加载部分视图后,我将重新初始化验证插件,如下所示。

$('#test').removeData("validator");
$.validator.unobtrusive.parse('#test');

我尝试使用下面线程中描述的验证属性,但它不起作用。也许它适用于正常加载的视图。

ASP.NET MVC Validation Groups?

但是,我可以通过调用textbox1.valid()和textbox2.valid()来单独验证。但我认为我缺少标准的做法。任何帮助表示赞赏。

1 个答案:

答案 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>

检查哪一种适合你。