ASP.NET MVC:如何“模型绑定”非HTML辅助元素(ASP.NET MVC: How to

2019-08-07 01:42发布

你能告诉我,我可以一个模型属性绑定到一个HTML元素,而无需使用HTML帮助创建的方式(S)?

换句话说,以一个普通的HTML元素如: <input type="text" />

Answer 1:

如果你指的是模型绑定 ,它不需要帮手,但命名约定。 助手只是使它很容易和简洁的创建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>

因此,这可以在没有助手可以做到,但你要尽可能多地使用它们。



Answer 2:

只要给它一个名字:

<input type="text" name="foo" />

然后你的控制器动作中简单地具有相同名称的参数:

public ActionResult Process(string foo)
{
    // The foo argument will contain the value entered in the 
    // corresponding input field
}


文章来源: ASP.NET MVC: How to 'model bind' a non html-helper element