2010-05-13 73 views
1

我使用asp.net MVC2并具有基本的页面,其中包括在表单中的局部视图MVC2:验证PartialView表格前提交页面含有管窥

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

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

<% } %> 

当我提交表单时,httpPost我的页面的动作被调用,并且在那之后我的偏查看httpPost行动 被称为

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

但正如我做验证在我的部分查看httpPost方法(因为我想用我的部分在几个地方查看)我不能决定我的漏洞页面是否有效。

有没有人有想法我该怎么做?在页面 中拥有多个部分视图,但在页面操作方法中包含有关验证的信息,这不是一项常见任务吗?

非常感谢您的帮助!

回答

1

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

+0

感谢您的快速回答。我已经调试它,并且行动电话是: - 页面获取方法 - PartialView GET方法 然后我按提交 - 页POST方法 - PartialView POST方法 我做在页面返回查看() post方法。但是,应该调用GET PartialView Action,而不是POST Partial View Method,或者?将RenderAction放入提交中不是一个好主意吗? – Pascal 2010-05-13 12:07:39

+0

@Pascal - 局部视图动作的第二次调用是在页面作为后置动作的结果呈现时出现的。由于它来自POST事件,因此它将调用使用post方法属性装饰的方法版本。但是到了这个时候,这个帖子的动作就完成了。通常,您不会在视图中呈现单独的获取/发布版本。它通常是一个ChildActionOnly - 即只能调用呈现HTML片段,而不是通过请求实际调用。所有的验证都必须在视图呈现在邮件之前完成 – tvanfosson 2010-05-13 12:29:57

+0

好的,我明白了。但是,我不知道我能怎么想。所以我想要做什么:我在管理区域有一个设置面板。我想在注册过程的页面中使用相同的设置面板。所以我有不同的页面,我想展示相同的局部视图。但我在页面上有不同的提交。注册人将进入下一个视图,设置页面shell会进入索引页面。我试图在部分视图中进行提交。但后来并没有工作,因为儿童行为不能重定向。当我在我的页面上提交时,我怎样才能首先验证局部视图? – Pascal 2010-05-13 14:25:15