关于ASP.NET中的视图

时间:2016-03-16 14:13:28

标签: asp.net-mvc

使用模型绑定,它看起来像:

@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。

1 个答案:

答案 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>

这是非常简化的,但它指出了一些事情:

  1. 表单操作将被适当设置,以便将帖子发送到正确的位置,而不是硬编码应该去的位置。

  2. 请求验证令牌已添加到表单中以防止CSRF,否则您将无法使用CSRF。

  3. 您的标签文本实际上由label元素包装,并且for属性已正确设置,以便它实际上与输入连接,而不是您必须对此进行硬编码,或者(在你的情况下)完全丧失功能。

  4. 输入被赋予适当的nameid属性值,因此它既可以连接到标签,又可以在帖子上正确绑定,而不是必须硬编码所有此

  5. 我强调指出,如果你自己手动编写所有HTML,就必须对很多东西进行硬编码。这很重要,因为通过使用帮助程序,Razor会将C#代码中的更改传播到HTML,并让您知道属性名称之类的内容是否已更改,或者属性是否已完全删除。

    如果您对所有HTML进行硬编码,则不会得到任何HTML。事情会默默地打破。将不会呈现字段。应该发布的值将被丢弃。您将100%负责始终保持HTML和C#代码同步,如果您已经完成了任何时间的开发,您应该熟悉其最基本的一个原则:任何需要人工干预的内容 会失败,因为人类失败了。你忘记。你错过一些东西。你搞砸了。这些都是给予的。使用Razor助手意味着你可以消除一些人类的错误,这总是一件好事。