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

Edu*_*elo 1 asp.net asp.net-mvc razor asp.net-mvc-4

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

public ActionResult Create()
{
   return View()
}

[HttpPost]
public ActionResult Create(FormCollection form)
{
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

小智 5

您的使用@Html.Textbox(model.User.Username)意味着您生成的文本框的name属性等于Username不会绑定到模型的值.如果UserName说它John会产生的值

<input type="text" name="John" id="John" value />
Run Code Online (Sandbox Code Playgroud)

将其更改为

@Html.TextBoxFor(m => m.User.Username)
Run Code Online (Sandbox Code Playgroud)

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

<input type="text" name="User.Username" id="User_Username" value="John" />
Run Code Online (Sandbox Code Playgroud)

然后将POST方法签名更改为

[HttpPost]
public ActionResult Create(RegistrationViewModel model)
Run Code Online (Sandbox Code Playgroud)

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

另请注意,该方法Create()在您的视图中是必需的

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