2012-10-22 71 views
0

當模型中有空類時,如何在MVC中使用textboxfor呈現文本框。MVC - null模型中的對象,如何使用此模型呈現文本框

例如我已經在我使用我的典範

public class ClassOne 
{ 
    public string classOneProperty {get;set;} 
    public ClassTwo classTwoObject {get; set;} 
} 

public class ClassTwo 
{ 
    public string classTwoProperty {get;set;} 
} 

以下所以我有一個類值表和用戶點擊編輯ClassOne的現有項目。在ClassOne中,對象ClassTwo爲空,因爲它沒有在表中的項目初始創建時設置,所以當我嘗試執行@Html.TextBoxFor(m => m.classTwoObject.classTwoProperty)時,我得到一個空引用錯誤。

如何使用TextBoxFor編輯其中有空對象的字段,因爲我仍然希望它們在回發時綁定到模型?

感謝, DMAN

+0

爲什麼不是模型正好被設置爲一個'新ClassOne(){classTwoObject =新ClassTwo一個構造函數() },或者在ClassOne中創建一個初始化classTwoObject的構造函數? – Brook

回答

1

您可以創建初始化classTwoObject

public class ClassOne 
{ 
    public string classOneProperty {get;set;} 
    public ClassTwo classTwoObject {get; set;} 
    public CLassOne() 
    { 
     classTwoObject = new ClassTwo(); 
    } 

} 

或者只是初始化它內聯

new ClassOne(){classTwoObject=new ClassTwo()}; 
+0

對不起,我想我應該在這裏澄清一點,第一和第二類存儲在數據庫中,並使用EF進行檢索,因此在將對象放入視圖之前初始化該對象並不會使EF SaveChanges處於打開狀態回發認爲有沒有實際存在的對象,因此在數據庫中創建空條目? – DMCApps

+0

是啊,這是一個明顯的一個我只是認爲這會使數據庫中的條目不準確,但無論如何,每次我不明白爲什麼它不會有一個對象的時候,EF仍然爲它輸入條目,然後只有空字段。對不起,愚蠢的問題應該看看EF和DB如何首先行事。 – DMCApps

+1

您原來的問題來自於在視圖中使用EF對象。 – Pluc

2

當您再回到您的ClassOne你需要的classTwoObject屬性初始化爲new ClassTwo()

樣布魯克如上所述。打敗我吧。

+0

解決問題的最簡單方法。 +1 –

+0

事實上,這很簡單,我想我可能會錯過一些東西,所以我首先要求作爲評論。 – Brook

+0

@Lostdreamer對不起,我想我應該在這裏澄清一點,第一和第二類存儲在數據庫中,並使用EF進行檢索,因此在將對象放入視圖之前初始化對象時,不會使EF在回發上的SaveChanges認爲有沒有實際存在的對象,因此在數據庫中創建空條目? – DMCApps