2011-04-27 61 views
0

我已登錄認爲需要LoginPageViewModel:MVC3 html.TextBox

public class LoginPageViewModel : PageViewModel 
{ 
    public string ReturnUrl { get; set; } 

    public bool PreviousLoginFailed { get; set; } 

    public LoginFormViewModel EditForm { get; set; } 
} 

其在視圖中呈現。當用戶試圖登錄我只想給LoginFormViewModel(Model.EditForm)張貼到控制器:

public ActionResult Login(LoginFormViewModel loginDetails) 
{ 
    //do stuff 
} 

使用Html.TextBox我可以手動指定表單字段「loginDetails.UserName」的名稱和發回控制器,一切正常。

@model Web.Controllers.User.ViewModels.LoginPageViewModel 

@using (Html.BeginForm()){ 
@Html.Hidden("loginDetails.ReturnUrl", Model.ReturnUrl) 

    @Html.LabelFor(x => x.EditForm.UserName, "User Name:") 
    @Html.TextBox("loginDetails.UserName", Model.EditForm.UserName) 
    @Html.ValidationMessageFor(x => x.EditForm.UserName) 

..... 

但我想要做的就是使用staticaly類型的助手,喜歡的東西:

@Html.TextBoxFor(x => x.EditForm.UserName) 

但我無法得到這個工作。

您是否只能在使用強類型幫助器時回發相同的模型?有什麼我錯過了嗎?智能感知似乎沒有給出任何線索,如表單字段字符串。

回答

1

你可以指定一個前綴,以便默認模型綁定能夠成功地解決該房產:

[HttpPost] 
public ActionResult Login(
    [Bind(Prefix = "EditForm")]LoginFormViewModel loginDetails 
) 
{ 
    ... 
} 

現在隨意使用強類型TextBoxFor甚至更​​好:在EditorFor幫手。