![](/img/trans.png)
[英]Asp.Net MVC and Partial Views and Mixing Ajax.BeginForm and Html.BeginForm
[英]Ajax.BeginForm in MVC using partial views with different models?
問題:
我正在嘗試利用AjaxExtension BeginForm來提交表單數據。 我注意到的問題是,由於MVC處理模型綁定的方式,模型中的復雜對象及其所有屬性都在AJAX帖子上丟失了。 我似乎無法找到一種方法來解決這個問題,同時又保持各種視圖之間所需的分隔。 我確實看過使用Ajax BeginForm()將兩個模型傳遞給Controller的方法,但是該解決方案不適用於我的問題,因為視圖沒有拆分成依賴於不同模型的局部視圖。
這是我的代碼的樣子(至少本質上是-更改名稱):
A.cshtml
@model A
<div>
@using (Ajax.BeginForm("ActionA", "ControllerA", new { id = Model.Id }, new AjaxOptions { HttpMethod = "POST" }, new { id = "formId" }))
{
@Html.Partial("ModelForm", Model.B)
}
</div>
B.cshtml
@model B
...
<div>
<p>@Html.TextBoxFor(x => x.Prop1)</p>
</div>
<div>
@Html.EditorFor(x => x.ComplexObject1)
</div>
<div class="spacing">
<p>@Html.TextBoxFor(x => x.Prop2)</p>
</div>
<div class="spacing">
@Html.EditorFor(x => x.ComplexObject2)
</div>
...
A.cs
...
public B B { get; set;}
...
ControllerA.cs
...
public ActionResult ActionA(A model) {
//do something with model
}
...
當我在控制器的ActionResult中放置斷點時,將實例化模型對象,但B屬性為null。 如果我添加一個@ Html.HiddenFor(x => xBProp1)並運行相同的代碼,我會看到B不為空,但是我為Prop1分配的屬性會丟失。 另外,如果我將Prop1添加到A.cs並運行相同的代碼,我會注意到將B的Prop1分配給A的Prop1(這有助於我理解綁定的工作原理)。 我基本上希望表單能夠識別出,在B.cshtml中,所有Html幫助器都在填充B對象,該對象是A對象中的一個屬性,該屬性被發送到我的控制器。 這可能嗎?
正如Stephen Muecke指出的那樣,HtmlFieldPrefix看起來就是解決此問題的方法。
您的模型A具有模型B的引用屬性。因此,您可以輕松地將模型B中的屬性用於與模型A綁定的視圖中。您可以嘗試如下操作:
@model A
<div>
@using (Ajax.BeginForm("ActionA", "ControllerA", new { id = Model.Id }, new AjaxOptions { HttpMethod = "POST" }, new { id = "formId" }))
{
// @Html.Partial("ModelForm", Model.B)
<div>
<p>@Html.TextBoxFor(x => x.B.Prop1)</p>
</div>
<div>
@Html.EditorFor(x => x.B.ComplexObject1)
</div>
<div class="spacing">
<p>@Html.TextBoxFor(x => x.B.Prop2)</p>
</div>
<div class="spacing">
@Html.EditorFor(x => x.B.ComplexObject2)
</div>
}
</div>
謝謝!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.