2014-01-15 65 views
0

我有以下視圖模型:ASP.NET MVC:裝訂動態呈現的局部視圖作爲視圖模型的嵌套屬性

public class Person 
{ 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public BankAccount BankAccount { get; set; } 
    public PayPalAccount PayPalAccount { get; set; } 
} 

public class BankAccount 
{ 
    public string BankName { get; set; } 
    public string AccountNumber { get; set; } 
} 

public class PayPalAccount 
{ 
    public string PayPalEmail { get; set; } 
} 

以我單一視圖我有結合Person模型,並且還具有一個形式一個DropDownList讓我們的用戶選擇一個帳戶類型。

一旦用戶做出選擇,我使用jQuery ajax動態加載部分視圖之一,代表BankAccountPayPalAccount,並將其添加到頁面中。

用戶點擊提交後,我把這個動作:

public ActionResult Save(Person person) 
{ 
    // Here I expect that either person.BankAccount or person.PayPalAccount 
    // will contain the user input, and the other will be null 
} 

如何使局部視圖屬性綁定到嵌套屬性在我Person視圖模型?

回答

2

您的表單字段必須以前綴(與BankAccount.PayPalAccount.),以便他們可以自動綁定。

當您從Ajax中返回您的部分視圖時,使用您當前使用的模型,它們的名稱沒有前綴。

對它們加前綴的更簡單方法是使用完全相同的View Model類:Person適用於這兩個部分視圖。如果你這樣做,在剃刀你必須寫

@Html.EditorFor(m => m.BankAccount.BankName) 

產生的輸入字段將具有所需的前綴BankAccount.,也就是說,它看起來就像這樣:<input ... name='BankAccount.BankName' ... />

你也可以創建一個視圖模型這樣你的部分:

public class BakAccountModel 
{ 
    // make sure the property name is the same as in the Person view model 
    public BankAccount { get; set; } 
} 

的最後,你可以嘗試這樣一個解決方案: ASP.NET MVC partial views: input name prefixes

我不能保證最後的解決方案將正常工作:例如,它可能會破壞ModelState。而且很難實施和「不太標準」。

相關問題