簡體   English   中英

在MVC中使用Ajax.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM