使用模型绑定,它看起来像:
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>StudentRegistration</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.USN, htmlAttributes: new { @class = "control-label col-md-2" })
以简单的Html:
<form>
First Name:
<input type="text" name="firstname"><br>
Last Name:
<input type="text" name="lastname"><br>
Password:
<input type="password" name="pwd"><br>
Radio Button: Are you male or female?<br>
<input type="radio" name="sex" value="male">Male
</form>
我的问题是:在为模型编写视图时,我是否必须使用字段包装模型名称,或者我可以在视图中明确地编写html代码?我使用Entity Framework作为DB。
答案 0 :(得分:1)
首先,您的HTML版本不完全相同。等价物更像是:
<form action="" method="post">
<input type="hidden" name="_RequestVerificationToken" value="XXXXXX" />
<label for="FirstName">First Name:</label>
<input type="text" name="FirstName" id="FirstName">
<span class="validation-error">...</span>
...
</form>
这是非常简化的,但它指出了一些事情:
表单操作将被适当设置,以便将帖子发送到正确的位置,而不是硬编码应该去的位置。
请求验证令牌已添加到表单中以防止CSRF,否则您将无法使用CSRF。
您的标签文本实际上由label
元素包装,并且for
属性已正确设置,以便它实际上与输入连接,而不是您必须对此进行硬编码,或者(在你的情况下)完全丧失功能。
输入被赋予适当的name
和id
属性值,因此它既可以连接到标签,又可以在帖子上正确绑定,而不是必须硬编码所有此
我强调指出,如果你自己手动编写所有HTML,就必须对很多东西进行硬编码。这很重要,因为通过使用帮助程序,Razor会将C#代码中的更改传播到HTML,并让您知道属性名称之类的内容是否已更改,或者属性是否已完全删除。
如果您对所有HTML进行硬编码,则不会得到任何HTML。事情会默默地打破。将不会呈现字段。应该发布的值将被丢弃。您将100%负责始终保持HTML和C#代码同步,如果您已经完成了任何时间的开发,您应该熟悉其最基本的一个原则:任何需要人工干预的内容 会失败,因为人类失败了。你将忘记。你将错过一些东西。你将搞砸了。这些都是给予的。使用Razor助手意味着你可以消除一些人类的错误,这总是一件好事。