Html.Textbox不绑定到我的模型在视图中的属性

时间:2015-08-06 10:43:08

标签: asp.net asp.net-mvc asp.net-mvc-4 razor

我有一个由控制器返回的视图和来自控制器的操作方法:

public ActionResult Create()
{
   return View()
}

[HttpPost]
public ActionResult Create(FormCollection form)
{
}

我希望它们可以在一个视图中完成,如:

@model Models.RegistrationViewModel
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new {@class = "form-horizontal", role = "form"}))
{
   @Html.TextboxFor(model.User.Username )
}

但问题是我无法将我的textboxfor绑定到模型属性..如何使用单个视图进行发布并进入我的场景..

2 个答案:

答案 0 :(得分:5)

您使用@Html.Textbox(model.User.Username)表示您生成的文本框的name属性等于值Username,而该值不会绑定到模型。如果UserName的值为John,则会生成

<input type="text" name="John" id="John" value />

将其更改为

@Html.TextBoxFor(m => m.User.Username)

将生成与您建模相关的正确name属性

<input type="text" name="User.Username" id="User_Username" value="John" />

然后将POST方法签名更改为

[HttpPost]
public ActionResult Create(RegistrationViewModel model)

以便绑定模型并正确设置其值。

另请注意,该方法名为Create(),因此在您的视图中,它必须是

@using (Html.BeginForm("Create", "Account", FormMethod.Post, new { @class = "form-horizontal", role = "form" })

答案 1 :(得分:3)

Beginform中的操作应与操作方法的名称相同:

同样,将模型传递给action方法:

margin

您还需要表单中的提交按钮才能应用帖子操作:

[HttpPost]
public ActionResult Create(RegistrationViewModel pMyModel)
{
     string tUsername= pMyModel.User.Username;
}