如何在不使用ASP.Net MVC HTML助手的情况下绑定HTML控件?

9

我是MVC的新手。我看到在MVC中,人们通过以下方式生成HTML并绑定数据:

@using (Html.BeginForm())
{
    <div>
        @Html.LabelFor(m => p.Name, "Name:")
        @Html.TextBoxFor(m => p.Name)
    </div>
    <input type="submit" value="Create" />
}

但如果我不想使用HTML Helper扩展,那么我应该如何编写代码来将普通的HTML控件和表单与模型数据绑定呢?请提供示例代码。谢谢。

但如果我不想使用HTML Helper扩展,那么我应该如何编写代码来将普通的HTML控件和表单与模型数据绑定呢?请提供示例代码。谢谢。


1
如果您不想使用MVC助手来正确创建HTML输入控件,那么为什么要使用MVC呢?我看不出任何好的理由让我们在编写HTML以正确绑定模型时使生活更加困难。 - Erik Philips
1个回答

10

您需要使用input控件的name属性来匹配您的模型属性名称。

例如,在您目前的情况下,如果您想要将TextBoxFor()替换为input控件,请按如下方式操作:

文本框:

@Html.TextBoxFor(m=> m.Name)
<input name="Name" type="Text" value="@Model.Name"/>

下拉列表:

@Html.DropDownListFor(m=>m.SomeProperty,ItemsList)

<select name="SomePropertyType">
<option value="someValue">Some Text</option>
</select>

对于下拉列表的情况,我们需要采取同样的方式。

@Html.BeginForm():

@using(Html.BeginFor("ActionName","ControllerName",FormMethod.Post))
{
}

在 HTML 中,如果要创建表单,您需要使用 form 标签:

<form action="@Url.Action("ActionName","ControllerName")" method="post">

</form>

更新:

@Html.TextBoxFor(m=>m.SomeProperty")

在HTML中:

<input id="SomeProperty" name="SomeProperty" type="text" value="@Model.SomeProperty" />

@Html.TextAreaFor("SomeName", "", 10, 50, null)

在HTML中为:

<textarea cols="50" id="SomeName" name="SomeName" rows="10">

密码用于:

@Html.PasswordFor(m=>m.SomeProperty)

以 HTML 格式为:

<input id="SomeProperty" name="SomeProperty" type="password" />

请参考Scottgu的这篇文章以及这篇CodeProject文章


你说:“你必须使用输入控件的名称属性来匹配你的模型属性名称”,我们不能使用ID属性代替名称属性吗?为什么在MVC中名称属性比ID属性更重要? - Mou
你能否请帮我重定向到讨论为什么人们需要在MVC中使用名称属性进行模型绑定而不是 ID 属性的正确文章?谢谢。 - Mou
参考此SO帖子:https://dev59.com/wGYq5IYBdhLWcg3wmRua 如果我找到了文章,我会分享的。 - Ehsan Sajjad
1
我们不能使用ID属性代替名称属性吗?不行,从来没有这样的情况,以后也不会。万维网联盟从未改变以下事实 - 当提交表单进行处理时,某些控件的名称将与其当前值配对,并且这些配对将随表单一起提交 - Erik Philips
2
不,你不能使用ID。原因是你的网络浏览器并不使用ID来提交表单数据,它只使用名称。这就是名称属性的目的,特别是用于表单提交。你无法更改这一点,因为这是HTML标准。这与MVC无关,对所有HTML框架都适用。浏览器根本不会以其他方式工作。我建议你学习更多关于HTML和HTTP的知识,因为这些知识在理解MVC的细节方面非常有价值。 - Erik Funkenbusch
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接