2017-01-30 64 views
0

我有一個視圖模型類混淆HTML幫助中的ASP.NET

public class NewCustomerViewModel 
{ 
    public IEnumerable<MembershipType> MembershipType { get; set; } 
    public Customer Customer { get; set; } 
} 

,我有一個客戶控制器,新的()操作方法:

public ActionResult New() 
{ 
    var membershipTypes = _context.MembershipTypes.ToList(); 
    var viewModel = new NewCustomerViewModel 
    { 
     MembershipType = membershipTypes 
    }; 

    return View(viewModel); 
} 

的看法是:

@using (Html.BeginForm("Create", "Customers")) 
{ 
    <div class="form-group"> 
     @Html.LabelFor(e => e.Customer.Name) 
     @Html.TextBoxFor(e => e.Customer.Name, new { @class = "form-control" }) 
    </div> 
    <div class="form-group"> 
     @Html.LabelFor(e => e.Customer.Birthdate) 
     @Html.TextBoxFor(e => e.Customer.Birthdate, new { @class = "form-control" }) 
    </div> 
    <div class="checkbox"> 
     <label> 
      @Html.CheckBoxFor(e => e.Customer.IsSubscribedToNewsletter, new { @class = "checkbox" }) Subscribed To Newsletter? 
     </label> 
    </div> 

例如,這是幹什麼用的?

@Html.TextBoxFor(e => e.Customer.Name, ...) 

我們現在只有一個空的Customer實例,我們正在試圖獲取該名稱?

+0

這是真的不清楚你在問什麼。 – apc

+1

我不完全理解你的問題,你可以請嘗試和改進你說的話,並明確提出一個問題。另外,讓我們知道您期望發生的事情 –

+0

您可能需要在您的模型中創建一個新的Customer對象,目前它爲null。 – apc

回答

1

前段時間我有this same question

雖然你永遠不會實例Customer,對象定義和發動機能夠建立你的看法吧。

回發時,ModelBinder將實例化一個新的Customer並嘗試從表單值中填充它。網絡是無狀態的,所以如果你在一個預先填充Customer對象或空的一個建築形式的時候,就回發ASP.NET只能從什麼形式構造它發送沒關係。

+0

因此有兩個Customer對象?一個是空的,一個是表單值作爲屬性?對於我來說,僅僅有一個空的Customer對象什麼都不做就只是奇怪? – grooveline

+1

在'GET'的要求,就包含空'Customer'對象的對象,但仍然有關於'Customer'元。回發時,ModelBinder將實例化Customer對象並嘗試爲您的控制器填充它。 – Jonesopolis

+0

的HTML輔助('@ Html.TextBoxFor(E => e.Customer.Name,...')越來越所述元數據有關'Customer.Name'對象來創建該輸入標籤 – Jonesopolis