mvc.net多种forms的childaction

我在页面上有2个表单,它们包含在母版页中,如下所示:

Html.RenderAction("Form1", "Controller") 

 Html.RenderAction("Form2", "Controller") 

控制器具有以下内容:

  Function Form1() As ActionResult Return View("Form1", New ModelObject()) End Function   Function Form1(ByVal formCollection As FormCollection) As ActionResult Return View("Form1", New ModelObject()) End Function  Function Form2() As ActionResult Return View("Form2", New ModelObject()) End Function   Function Form2(ByVal formCollection As FormCollection) As ActionResult Return View("Form2", New ModelObject()) End Function 

ascx中的表单标记如下,它们基本上是相同的forms,因此标记非常相似:

     

问题是,当我提交任何一个表单时,它会运行两个post方法。

所以Form1发布和Form2发布,但表单集合中的值是从哪个表单提交。

我的问题是:为什么这两个表单都提交了一组表单数据? 如何才能使用正确的表单数据调用相关操作?

我确信我犯了一个简单的错误,只是看不出来。

可以在此处找到演示此问题的项目: TestMVC.zip

提前致谢。

我找到了问题的解决方案,想知道是否有人想评论这种“解决方法”的正确性。

ok …所以第一步,从post动作中删除childonlyaction属性,并添加控制器/动作以在提交表单时运行。

 Html.BeginForm("Form1", "Form") 

这可确保调用正确的post操作。

下一步是找出我想要回归的东西。

所以..如果存在validation错误等,我需要返回自定义模型。所以我想我可以使用元数据或其他一些自定义validation来做到这一点,将模型添加到TempData然后执行RedirectToAction使操作成为我来的页面从。 ie / Home / Index或/ Controller / Action

我从引用者那里得到了控制器/动作,应始终设置,因为这来自后期动作。

谁能想到更好的方法呢? 因为这是我能找到的唯一方法,可以在不使用Ajax的情况下提供我想要的结果

我看到,当你渲染表单时,你没有明确地命名它们,你也没有提到表单方法。 你能不能这样做:

 <% using (Html.BeginForm("ACTION", "CONTROLLER")) {%> 

如果您使用的是子控件,那么为什么使用“Html.RenderAction”? 不应该是“Html.RenderPartial”喜欢:

 <% Html.RenderPartial("Search"); %> 

如果您从Post动作中取出[ChildActionOnly] ,它一次只能提交一个动作。

因此,考虑它的一种方法是尝试找出如何将部分视图作为整个页面返回。 也许将页面的路径存储在模型周围的ViewModel中,并在该路径上使用RedirectToAction

这个链接(http://dotnetslackers.com/articles/aspnet/ASP-NET-MVC-2-0-Using-Multiple-Actions.aspx)似乎建议删除ChildActionOnly是你需要做的,但不是在你的样本中工作。 最令人困惑的。