2011-08-11 66 views
2

我有一個viewmodel,它有一個嵌套的類什麼是不連接其他模型類。我可以在這個嵌套類(ClassX)中填充必要的數據以在視圖中顯示這些數據,但我無法從後操作中獲取嵌套類中的數據(通過MyViewModel),而只是在後處理中將其作爲另一個參數。它出現在原始viewmodel(MyViewModel)中,但其屬性爲null/0。ASP.NET MVC 3模型和視圖模型類

public class MyViewModel 
{ 
    public MyViewModel() 
    { 
     classX = new ClassX(); 
    } 

    public ClassX classX; 
    public int attrA {get;set;} 
    ... 
} 
public class ClassX {} 

// 
// POST: /MyModel/Create 
public ActionResult Create(MyViewModel myvm, **ClassX cx**, FormCollection collection) 
{} 

我的問題:我可以通過viewmodel類從嵌套類讀取數據嗎?

+2

只是一個猜測 - 我認爲轉換過程只會帶來屬性。我認爲你需要改變「public ClassX classX」;到「public classX classX {get; set;}」 –

+0

謝謝。我嘗試了你的建議,它的工作。 – sada

回答

0

如果我理解正確你的問題,你需要BindAttribute.Prefix的操作方法您ClassX cx參數的好文章。這樣,模型聯編程序將正確地綁定它的值。對於Bind.Prefix值應爲ClassX屬性的名稱在MyViewModel,在你的榜樣,串 - "classX"

// 
// POST: /MyModel/Create 
public ActionResult Create(MyViewModel myvm, [Bind(Prefix = "classX")]ClassX cx, FormCollection collection) 
{} 

設想是,在下面 - 在客戶端,當您提交表單,它的值被髮送到服務器像這樣

attrA=someValue 
classX.SomeProperty=someValue 
classX.SomeOtherProperty=someOtherValue 

當傳遞給動作參數時,該名稱=值字符串對被轉換爲對象。平等的左側的名稱匹配MyViewModel的屬性名稱,並且ClassX參數保留爲空。但是,然後你指定Prefix = "classX",模型綁定器匹配與ClassX屬性名稱相等的左側點之後的字符串,以便應該填充ClassX的值。

+0

謝謝你的回答。 – sada