你應該可以像你所描述的那樣使用A和B.
假設我們有以下幾點:
public class B {
public A A {get; set;}
public string X {get; set;}
public int Y {get;set;}
}
public class A {
public string Z {get; set;}
}
//then in your controller:
public ActionResult Edit() {
return View (
new B {
A = new A { Z = "AyyZee" } ,
X = "BeeEcks",
Y = 7
});
}
所以你的模型是B.
的實例
你的觀點,你的嵌套的局部視圖應該產生HTML是這樣的:
<input type="text" name="A.Z" value="AyyZee" />
<input type="text" name="X" value="BeeEcks" />
<input type="text" name="Y" value="7" />
現在默認的模型聯編程序應該能夠把它掛起來:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit (B input) {
// apply changes
//the binder should have populated input.A
}
請注意,這隻適用於A和B都具有默認構造函數且相對簡單的類。如果你有更復雜的東西,你可以使用自己的粘結劑:
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Edit ([ModelBinder(typeof(BBinder))] B input) {
//...
}
public class BBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
return
new B {
A = new A { Z = Request["A.Z"] } ,
X = Request["X"],
Y = int.Parse(Request["Y"])
};
}
}
我無法得到這個工作。也許我只是在某個地方犯了一個簡單的錯誤。星期一再試一次,也許我會有一個更新的觀點:D非常感謝您的建議。 – Palantir 2009-09-11 15:03:51
這裏有更多關於粘合劑的細節:http://weblogs.asp.net/scottgu/archive/2008/10/16/asp-net-mvc-beta-released.aspx – Keith 2009-09-11 15:16:45