MVC3 html.TextBox

时间:2011-04-27 16:45:57

标签: asp.net-mvc-3 html-helper

我的登录视图采用了LoginPageViewModel:

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)

但是我无法让它发挥作用。

您是否只能在使用强类型帮助程序时回发相同的模型?我有什么遗漏吗? Intellisense似乎没有提供任何线索,例如表单字段字符串。

1 个答案:

答案 0 :(得分:1)

您可以指定前缀,以便默认模型绑定器可以成功解析属性:

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

现在可以随意使用强类型TextBoxFor甚至更好:EditorFor帮助器。