你能告诉我一种方法,我可以将模型属性绑定到 html 元素,而不使用 html 助手创建吗?
换句话说,对于一个普通的 html 元素,例如:<input type="text" />
你能告诉我一种方法,我可以将模型属性绑定到 html 元素,而不使用 html 助手创建吗?
换句话说,对于一个普通的 html 元素,例如:<input type="text" />
如果您指的是Model Binding,它不需要帮助程序,而是需要命名约定。助手只是让创建 HTML 标记变得简单而简洁。
您可以创建纯 HTML 输入并name
正确设置属性。默认命名约定只是基于点,省略父级实体的名称,但从那里限定它。
考虑这个控制器:
public class MyControllerController : Controller
{
public ActionResult Submit()
{
return View(new MyViewModel());
}
[HttpPost]
public ActionResult Submit(MyViewModel model)
{
// model should be not null, with properties properly initialized from form values
return View(model);
}
}
而这个模型:
public class MyNestedViewModel
{
public string AnotherProperty { get; set; }
}
public class MyViewModel
{
public MyViewModel()
{
Nested = new MyNestedViewModel();
}
public string SomeProperty { get; set; }
public MyNestedViewModel Nested { get; set; }
}
您可以纯粹在 HTML 中创建以下表单:
<form method="POST" action="MyController/Submit">
<div><label>Some property</label><input type="text" name="SomeProperty" /></div>
<div><label>Another property</label><input type="text" name="Nested.AnotherProperty" /></div>
<button type="submit">Submit</button>
</form>
如果要显示发布的值(在第二个Submit
重载中),则必须修改 HTML 以呈现模型属性。您可以将其放置在视图中,在本例中使用 Razor 语法并调用Submit.cshtml
:
@model MyViewModel
<form method="POST" action="MyController/Submit">
<div><label>Some property</label><input type="text" name="SomeProperty" value="@Model.SomeProperty" /></div>
<div><label>Another property</label><input type="text" name="Nested.AnotherProperty" value="@Model.Nested.SomeProperty" /></div>
<button type="submit">Submit</button>
</form>
因此,这可以在没有助手的情况下完成,但您希望尽可能多地使用它们。
只需给它一个名字:
<input type="text" name="foo" />
然后在你的控制器动作中简单地有一个同名的参数:
public ActionResult Process(string foo)
{
// The foo argument will contain the value entered in the
// corresponding input field
}