从父视图提交部分视图

时间:2015-09-21 14:19:36

标签: asp.net-mvc asp.net-mvc-partialview

所以,我有一个局部观点,让我们说:

@model myModel
@{
Layout = null;
}

....
Html.BeginForm("action", "Controller", FormMethodPost)
..... 
.....
.....
.....
<input type="submit" value = "Go"/>
}

在这个局部视图的内部,我正在渲染第二个局部视图,所以这将是:

@model myModel
@{
Layout = null;
}

....
Html.BeginForm("action", "Controller", FormMethodPost)
..... 
@{Html.RenderPartial("secondPartial");}
.....
.....
<input type="submit" value = "Go"/>
}

第二个部分也提交了一个表单,但这次使用的是Ajax,如下所示:

@model myModel
@{
Layout = null;
}

....
Ajax.BeginForm("secondAction", "sameController", new AjaxOption { HttpMethod = "POST", InsertionMode=InsertionMode.Replace, UpdateTargetID = "thisPartialDivId"})
..... 
.....
.....
.....
<input type="submit" value = "Go"/>
}

但是现在,每当我提交第二部分时,它就会提交它与其余字段无关的部分,甚至我也明确告诉它提交给它的行动只是提到了它的父母那里。并提交。

任何想法? thx:)

P.S。原因是:第二个视图为一个属性提交一个新值,然后它应该将该值添加到父视图中的下拉列表中。父级创建对象。

Kinda通过添加AntiForgeryToken解决了这个问题,但后来又出现了另一个错误,因为我在父视图中有3个(一个在父视图上,一个在每个部分上)。仍在寻找解决方案。 :)

1 个答案:

答案 0 :(得分:0)

看起来你正在嵌套这些表格。那样不行。见this question on the topic of nesting。我对规范的理解是你的第二个表单声明将被忽略。这也与您的结果一致。

很难提供一种对你的实际目标了解甚少的替代方案。但是,在我看来,当涉及到AJAX时,没有理由嵌套这些表单。您应该能够移动父表单定义的 之外的AJAX表单,以获得所需的行为。您仍然可以修改&#34; parent&#34;中的元素。当AJAX返回时形成。