你能告诉我,我可以一个模型属性绑定到一个HTML元素,而无需使用HTML帮助创建的方式(S)?
换句话说,以一个普通的HTML元素如: <input type="text" />
你能告诉我,我可以一个模型属性绑定到一个HTML元素,而无需使用HTML帮助创建的方式(S)?
换句话说,以一个普通的HTML元素如: <input type="text" />
如果你指的是模型绑定 ,它不需要帮手,但命名约定。 助手只是使它很容易和简洁的创建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将不得不修改渲染模型的属性。 你会用剃刀语法把这个在视图中,在这种情况下,并呼吁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
}