Validation MVC2:在表单提交包含部分视图的页面之前验证部分视图

Validation MVC2:在表单提交包含部分视图的页面之前验证部分视图,validation,asp.net-mvc-2,form-submit,partial-views,Validation,Asp.net Mvc 2,Form Submit,Partial Views,我正在使用asp.net mvc2,并且有一个基本页面,其中包含表单中的部分视图 <% using (Html.BeginForm()) { %> <% Html.RenderAction("partialViewActionName", "Controllername"); %> <input type="submit" value="Weiter" /> <% } %> 但是当我在httpPost方法中对我的部分视图进行验证时(因为

我正在使用asp.net mvc2,并且有一个基本页面,其中包含表单中的部分视图

<% using (Html.BeginForm())
   { %>
<% Html.RenderAction("partialViewActionName", "Controllername"); %>

<input type="submit" value="Weiter" />

<% } %>
但是当我在httpPost方法中对我的部分视图进行验证时(因为我想在几个地方使用我的部分视图),我无法确定我的页面是否有效

有人知道我该怎么做吗?在一个页面中有多个局部视图不是很常见吗 但是页面操作方法中有关于验证的信息吗


非常感谢你的帮助

呈现页面时,而不是发布页面时,将调用部分视图方法。完成post时,将调用的唯一操作是BeginForm中指定的操作。验证将在ModelBinder中进行——假设您正在为模型使用DataAnnotation。在绑定期间,由部分视图中的输入表示的模型的任何部分都将与模型的其余部分一起进行验证。如果手动处理验证,则需要验证post中调用的操作中的模型的所有部分。

在呈现页面时,而不是在发布页面时,将调用局部视图方法。完成post时,将调用的唯一操作是BeginForm中指定的操作。验证将在ModelBinder中进行——假设您正在为模型使用DataAnnotation。在绑定期间,由部分视图中的输入表示的模型的任何部分都将与模型的其余部分一起进行验证。如果您是手动处理验证,那么您将需要验证post上调用的操作中模型的所有部分。

谢谢您的快速回答。我已经对它进行了调试,操作调用是:-Page Get方法-PartialView Get方法然后我按submit-Page Post方法-PartialView Post方法我正在Page Post方法中执行返回视图()。但这应该调用GET-PartialView操作,而不是POST-PartialView方法,或者?将RenderAction放在submit中不是一个好主意吗?@Pascal-部分视图操作的第二次调用发生在页面作为post操作的结果呈现时。因为它来自POST事件,所以它将调用用POST方法属性修饰的方法版本。但此时,post操作已完成。通常,在视图中渲染的动作不会有单独的get/post版本。它通常是一个ChildActionOnly——也就是说,仅被调用以呈现HTML片段,而实际上不可通过请求调用。我知道,在postok上呈现视图之前,必须完成所有验证。但我不知道我怎么能想到这一点。所以我想做的是:我在管理区有一个设置面板。我希望在注册过程的页面中使用相同的设置面板。因此,我必须使用不同的页面,我希望显示相同的局部视图。但是我在页面上有不同的提交。注册页面进入下一个视图,设置页面进入索引页面。我试着在局部视图中提交。但这样做是行不通的,因为儿童行动无法重定向。当我的页面上有提交时,如何首先验证部分视图?@Pascal-只要部分视图本身未包含在包含页面的表单中,就可以在部分视图中有一个表单。i、 例如,不允许嵌套表单。我可能会重新构造页面,使部分内容在include视图的表单之外,并通过其自己的表单将部分内容发回另一个操作。是的。这就是我所尝试的。页面就像容器一样,没有表单。然后partial拥有表单,获得post并进行验证。现在的问题是,当我完成提交和发布时,我必须重新提交到不同的操作(在注册到下一步时,在设置页面中,将其添加到索引)。但嵌套(子)操作中不允许重定向。你有办法解决这个问题吗?非常感谢你的帮助!!谢谢你的快速回答。我已经对它进行了调试,操作调用是:-Page Get方法-PartialView Get方法然后我按submit-Page Post方法-PartialView Post方法我正在Page Post方法中执行返回视图()。但这应该调用GET-PartialView操作,而不是POST-PartialView方法,或者?将RenderAction放在submit中不是一个好主意吗?@Pascal-部分视图操作的第二次调用发生在页面作为post操作的结果呈现时。因为它来自POST事件,所以它将调用用POST方法属性修饰的方法版本。但此时,post操作已完成。通常,在视图中渲染的动作不会有单独的get/post版本。它通常是一个ChildActionOnly——也就是说,仅被调用以呈现HTML片段,而实际上不可通过请求调用。我知道,在postok上呈现视图之前,必须完成所有验证。但我不知道我怎么能想到这一点。所以我想做的是:我在管理区有一个设置面板。我希望在注册过程的页面中使用相同的设置面板。因此,我必须使用不同的页面,我希望显示相同的局部视图。但是我在页面上有不同的提交。注册页面进入下一个视图,设置页面进入索引页面。我试着在局部视图中提交。但这样做是行不通的,因为儿童行动无法重定向。当我的页面上有提交时,如何首先验证部分视图?@Pascal-只要部分视图本身未包含在包含页面的表单中,就可以在部分视图中有一个表单。i、 例如,不允许嵌套表单。我可能只是重新构造页面,使部分在include视图之外
[HttpPost]
public virtual ActionResult PagePostMethod(myModel model)
{
    // here I should know about the validation of my partial View
    // If partialView.ModelState is valid then
    //   return View("success");
    // else return View(model)
}

[HttpPost]
public virtual ActionResult partialViewActionName(myModel model)
{
    ModelState.AddModelError("Error");
    return View(model);
}