這是我在ASP.NET MVC真正模型的簡化,我認爲這將有助於集中在問題:麻煩路過視圖和控制器之間的複雜數據在ASP.NET MVC
比方說,我有這兩個域對象:
public class ObjectA
{
public ObjectB ObjectB;
}
public class ObjectB
{
}
我也有一種觀點認爲,可以讓我創建一個新的對象A和包括從可能ObjectBs列表中選擇一個對象B。
我已經創建了一個新的類來裝飾ObjectA與這個可能性列表,這是我真正的我的視圖模型。現在
public class ObjectAViewModel
{
public ObjectA ObjectA { get; private set; }
public SelectList PossibleSelectionsForObjectB { get; private set; }
public ObjectAViewModel(ObjectA objectA, IEnumerable<Location> possibleObjectBs)
{
ObjectA = objectA;
PossibleSelectionsForObjectB = new SelectList(possibleObjectBs, ObjectA.ObjectB);
}
}
,什麼是構建我的視圖和控制器,以允許用戶在視圖中選擇一個對象B,然後讓控制器保存對象A與對象B的選擇(對象B已經存在,並保存的最佳途徑)?
我試着創建一個類型爲ObjectAViewModel的強類型視圖,並將Html.DropDownList綁定到Model.PossibleSelectionsForObjectB。這很好,我可以很好地選擇對象。但是讓它回到控制器是我掙扎的地方。
嘗試性解決方案1:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(ObjectAViewModel objectAViewModel)
這裏這個問題是objectAViewModel.ObjectA.ObjectB屬性爲null。我正在考慮綁定到這個屬性的DropDownList,當用戶在視圖中選擇這個時會更新模型,但這不是由於某種原因。
嘗試性解決方案2:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Create(ObjectA objectA)
這裏這個問題是ObjectA.ObjectB屬性爲null。再次,我想也許DropDownList選擇會更新這個。
我也嘗試在上述每個解決方案中使用UpdateModel方法,但沒有運氣。有沒有人有任何想法?我猜我缺少一個綁定或某處的某個地方...
謝謝!
你可以改變公衆的ActionResult創建(對象A對象A) 公衆的ActionResult創建(對象A對象A,字符串對象B)。您不必從ModelState獲取值。 – LukLed 2009-12-20 10:18:31
謝謝!我會去做。 – manu08 2009-12-21 23:01:19