我正在開發基於MVC 4的Web應用程序,並且我正在嘗試使用HTML表單進行一些工作。我有一個視圖模型中的幾個單獨的模型,如下所示:在MVC 4中提交的部分視圖和模型jQuery表單提交0
public class NewAccountViewModel
{
UserModel User { get; set; }
AccountModel Account { get; set; }
TicketModel Ticket { get; set; }
}
然後我使用這個作爲我的視圖的模型。該視圖還包含每個模型的部分視圖。每個這些局部視圖也使用視圖模型作爲他們的模型,並且我從主視圖傳遞視圖模型實例是這樣的:
@Html.Partial("~/Views/Account/_User.cshtml", Model)
然後在局部視圖,我添加字段,例如:
@Html.TextBoxFor(m => m.User.Name)
在我的POST處理程序中,我接受視圖模型實例作爲參數,並且可以使用從那裏的表單提交的數據。表格使用jQuery.post
提交,$('#nameofmyform').serialize()
作爲數據提交。
此方法的工作方式與預期相同。但是,局部視圖和視圖模型之間的耦合過於緊密。如果我想在具有不同視圖模型的不同控制器中使用User模型,那麼這是不可能的,因爲局部視圖使用此特定視圖模型。
所以,我嘗試是這樣的:
@Html.Partial("~/Views/Account/_User.cshtml", Model.User)
,然後使用實際的模型作爲局部視圖的模型,我綁定的字段:
@Html.TextBoxFor(m => m.Name)
這工作是單向的,因爲所有字段都使用來自視圖模型及其包含的模型的數據正確填充。但是,在POST上,視圖模型未正確序列化回來。通過檢查從形式發回的數據,我看到的是,在一切都綁定到視圖模型的第一種方法,它系列化的形式,像這樣的數據:
{ "User.Name" : "Blahblah" ...
雖然用第二種方法,它只是通過模型序列化表單:
{ "Name" : "Blahblah" ...
由此,視圖模型的模型屬性在POST處理程序中都是空值。
所以,我真正想知道的是:是否有可能以某種方式預先從視圖模型的屬性名稱,以便它正確地序列化回我的視圖模型?我需要在JavaScript中通過jQuery來做到這一點,還是可以在我的.NET代碼中完成?
您需要使用編輯器模板這一點。從今天早些時候查看[這個答案](http://stackoverflow.com/a/15339376/1317705) – 2013-03-11 15:40:25