我有一个接受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)
.....但我想要做的是使用统计类型的helper,类似于:
@Html.TextBoxFor(x => x.EditForm.UserName)但我不能让它起作用。
当你使用强类型的帮助器时,你只能发回相同的模型吗?我是不是漏掉了什么?Intellisense似乎不会给出任何线索,比如表单字段字符串。
发布于 2011-04-28 00:47:20
您可以指定前缀,以便默认模型绑定器可以成功解析属性:
[HttpPost]
public ActionResult Login(
[Bind(Prefix = "EditForm")]LoginFormViewModel loginDetails
)
{
...
}现在,您可以随意使用强类型的TextBoxFor,甚至更好:EditorFor帮助器。
https://stackoverflow.com/questions/5807614
复制相似问题