• 在浏览器中启动页面。 (在 WebMatrix 的“ 文件 ”工作区中,右键单击该文件,然后选择“ 在浏览器中启动 ”。) 显示一个包含三个输入字段和一个 “提交 ”按钮的简单窗体。

    此时,如果单击“ 提交 ”按钮,则不会发生任何操作。 若要使表单有用,必须添加一些将在服务器上运行的代码。

    从表单读取用户输入

    若要处理表单,请添加读取提交的字段值并使用它们执行操作的代码。 此过程演示如何读取字段并在页面上显示用户输入。 (在生产应用程序中,通常使用用户输入执行更有趣的操作。你将在有关使用 databases 的文章中执行此操作。)

  • Form.cshtml 文件的顶部,输入以下代码:

    if (IsPost) {         string companyname = Request.Form["companyname"];         string contactname = Request.Form["contactname"];         int employeecount = Request.Form["employees"].AsInt();           You entered: <br />           Company Name: @companyname <br />           Contact Name: @contactname <br />           Employee Count: @employeecount <br />         </text>

    当用户首次请求页面时,仅显示空窗体。 用户 (将) 填写表单,然后单击“ 提交 ”。 这会将 (帖子) 用户输入提交到服务器。 默认情况下,请求将转到同一页 (即 Form.cshtml ) 。

    这次提交页面时,输入的值将显示在表单的正上方:

    查看页面的代码。 首先使用 IsPost 方法确定页面是否被发布,即用户是否单击了“ 提交 ”按钮。 如果这是帖子, IsPost 则返回 true。 这是 ASP.NET 网页的标准方法,用于确定是使用初始请求 (GET 请求) 还是回发 (POST 请求) 。 (有关 GET 和 POST 的详细信息,请参阅 使用 Razor 语法进行 ASP.NET 网页编程简介 中的边栏“HTTP GET and POST 和 IsPost 属性”。)

    接下来,获取用户从 Request.Form 对象中填充的值,并将其放入变量中供以后使用。 对象 Request.Form 包含随页面一起提交的所有值,每个值都由键标识。 键等效于 name 要读取的窗体字段的 属性。 例如,若要) 读取 companyname 文本框 (字段,请使用 Request.Form["companyname"]

    窗体值作为字符串存储在 对象中 Request.Form 。 因此,当必须使用值作为数字、日期或其他某种类型时,必须将其从字符串转换为该类型。 在此示例中, AsInt 的 方法 Request.Form 用于将包含员工计数) 的雇员字段的值转换为整数 (。

  • 在浏览器中启动页面,填写表单字段,然后单击“ 提交 ”。 该页显示输入的值。

    用于外观和安全性的 HTML 编码

    HTML 对 、 和 & < > 字符具有特殊用途。 如果这些特殊字符出现在预期位置,它们可能会破坏网页的外观和功能。 例如,浏览器将解释 < 字符 (,除非它后跟空格) 作为 HTML 元素的开头,如 <b> <input ...> 。 如果浏览器无法识别元素,则它只是放弃以 < 开头的字符串,直到它到达它再次识别的内容。 显然,这可能会导致页面呈现异常。

    HTML 编码将这些保留字符替换为浏览器解释为正确符号的代码。 例如, 字符 < 替换为 &lt; > 字符替换为 &gt; 。 浏览器将这些替换字符串呈现为要查看的字符。

    每当显示字符串时,最好使用 HTML 编码, (输入) 从用户那里获取。 否则,用户可以尝试让网页运行恶意脚本,或者执行其他损害网站安全或不符合你意图的操作。 (如果获取用户输入,将其存储在某个位置,然后在以后显示,例如,作为博客评论、用户评论或类似内容,则这一点尤其重要。)

    为了帮助防止这些问题,ASP.NET 网页自动对从代码输出的任何文本内容进行 HTML 编码。 例如,使用 代码(如 @MyVar )显示变量或表达式的内容时,ASP.NET 网页会自动对输出进行编码。

    验证用户输入

    用户会犯错误。 你要求他们填写字段,而他们忘记了,或者你要求他们输入员工人数,然后他们键入姓名。 若要确保在处理表单之前已正确填写表单,请验证用户的输入。

    此过程演示如何验证所有三个表单字段,以确保用户不会将其留空。 你还检查员工计数值是一个数字。 如果存在错误,将显示一条错误消息,告知用户哪些值未通过验证。

  • Form.cshtml 文件中,将第一个代码块替换为以下代码:

    Validation.RequireField("companyname", "Company name is required.");     Validation.RequireField("contactname", "Contact name is required.");     Validation.RequireField("employees", "Employee count is required.");     Validation.Add("employees", Validator.Integer());     if (IsPost)  {         var companyname = Request.Form["companyname"];         var contactname = Request.Form["contactname"];         var employeecount = Request.Form["employees"];         if(Validation.IsValid()){               You entered: <br />               Company Name: @companyname <br />               Contact Name: @contactname <br />               Employee Count: @employeecount <br />             </text>

    若要验证用户输入,请使用 Validation 帮助程序。 通过调用 Validation.RequireField 来注册必填字段。 通过调用 Validation.Add 并指定要验证的字段和要执行的验证类型,可以注册其他类型的验证。

    页面运行时,ASP.NET 为你执行所有验证。 可以通过调用 Validation.IsValid 来检查结果,如果所有内容都通过,则返回 true;如果任何字段未通过验证,则返回 false。 通常,在 Validation.IsValid 对用户输入执行任何处理之前调用 。

  • <body> 通过向 方法添加三个调用 Html.ValidationMessage 来更新 元素,如下所示:

    <form method="post">     <fieldset>       <legend>Add Customer</legend>          <label for="CompanyName">Company Name:</label>          <input type="text" name="CompanyName" value="" />          @Html.ValidationMessage("companyname")          <label for="ContactName">Contact Name:</label>          <input type="text" name="ContactName" value="" />          @Html.ValidationMessage("contactname")          <label for="Employees">Employee Count:</label>          <input type="text" name="Employees" value="" />          @Html.ValidationMessage("employees")          <label>&nbsp;</label>          <input type="submit" value="Submit" class="submit" />     </fieldset>   </form> </body>

    若要显示验证错误消息,可以调用 Html。 ValidationMessage 并向其传递要为其发送消息的字段的名称。

  • 运行页面。 将字段留空,然后单击“ 提交 ”。 会看到错误消息。

  • 将字符串 (例如“ABC”) 添加到“ 员工计数 ”字段,然后再次单击“ 提交 ”。 这一次,你会看到一个错误,指示字符串的格式不正确,即整数。

    ASP.NET 网页提供了用于验证用户输入的更多选项,包括使用客户端脚本自动执行验证的功能,以便用户在浏览器中立即获得反馈。 有关详细信息,请参阅后面的 其他资源 部分。

    在回发后还原表单值

    在上一部分中测试页面时,你可能已注意到,如果出现验证错误,则输入的所有内容 (不仅) 无效数据已消失,而且必须重新输入所有字段的值。 这说明了一个要点:提交页面、处理页面,然后再次呈现页面时,将从头开始重新创建该页面。 如你所看到的,这意味着提交页面时页面中的任何值都将丢失。

    但是,可以轻松解决此问题。 您有权访问对象中 Request.Form (提交的值,因此可以在呈现页面时将这些值填充回窗体字段中。

  • Form.cshtml 文件中,使用 value 特性替换 value 元素的属性 <input> ::

    <!DOCTYPE html>
        <title>Customer Form</title>
      </head>
        <form method="post">
          <fieldset>
            <legend>Add Customer</legend>
              <label for="CompanyName">Company Name:</label>
              <input type="text" name="CompanyName"
                     value="@Request.Form["companyname"]"  />
              @Html.ValidationMessage("companyname")
             <label for="ContactName">Contact Name:</label>
             <input type="text" name="ContactName"
                    value="@Request.Form["contactname"]" />
             @Html.ValidationMessage("contactname")
             <label for="Employees">Employee Count:</label>
             <input type="text" name="Employees"
                    value="@Request.Form["employees"]" />
             @Html.ValidationMessage("employees")
              <label>&nbsp;</label>
              <input type="submit" value="Submit" class="submit" />
        </fieldset>
      </form>
    </body>
    

    value元素的 <input> 属性已设置为从 对象中动态读取字段值Request.Form。 首次请求页面时,对象中的 Request.Form 值全部为空。 这很好,因为这样窗体是空白的。

  • 在浏览器中启动页面,填写表单字段或将其留空,然后单击“ 提交”。 将显示一个显示已提交值的页面。

  •