2011-11-25 105 views
4

例如,有一些對象將是強類型的視圖模型:綁定對象不能爲空

class SomeModel { 
    public string SomeUsualField { get; set; } 
} 

此外,一些動作在控制器的存在,將與對象上面指定工作:

public ActionResult Index(SomeModel obj) 
{ 
    return View(obj); 
} 

所以問題是爲什麼obj不是nullIndex行動首先調用?它創建了SomeModel類的新實例,其空值爲SomeUsualField

+0

Is SomeModel a struct?如果是這樣,它會自動初始化obj到一個新的SomeModel,並分配所有的默認值。 –

+0

@xixonia Definetely no。正如你可以在上面看到的那樣,這是一堂課。 – kseen

回答

2

ASP.NET MVC模型綁定基礎設施嘗試使用來自請求對象(查詢字符串,表單字段...)的數據填充所有屬性。因此它會創建控制器所有參數的實例,以嘗試匹配這些屬性。 因爲您不傳遞SomeUsualField,所以它爲null,但參數對象具有空實例。

當您撥打http://localhost/MySite/MyController/Index?SomeUsualField=test時,您可以初始化屬性SomeUsualField。 SomeUsualField屬性會自動初始化爲'test'

如果您不想設置參數,您可以將其保留並使用屬性[HttpPost]進行第二個操作。一個很好的教程是music store

public ActionResult Index() 
{ 
    var obj = new SomeModel(); 
    return View(obj); 
} 

[HttpPost] 
public ActionResult Index(SomeModel obj) 
{ 
    // update logic 
    return View(obj); 
} 
+0

好的。我怎樣才能確定什麼'obj'是絕對新的(在第一次調用'Index'動作的情況下)?你的方法是什麼? – kseen

+0

對不起,我不明白你的評論。正如我所說,obj將由模型綁定器通過反射創建,並且是一個新對象。如果模型綁定器會找到匹配的屬性,該對象將被初始化。當你調用http:// localhost/MySite/MyController/Index?SomeUsualField = test時,你可以試試這個。然後obj將被初始化。 – slfan

+0

對不起,我的醜英語。我的意思是,在第一次調用時,是否有任何方法在Index方法中獲得'obj' = null(例如,頁面首次打開時)? – kseen