0

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

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

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

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

ASP.NET MVC 验证组?

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

4

1 回答 1

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 ”,您的结果将出现在视图上。

//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);
    }

然后在部分视图中,您可以调用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>

检查两种方式哪一种适合您。

于 2012-09-27T07:03:07.863 回答