Request.Form仅适用于名称标签?

时间:2016-06-03 08:48:53

标签: html asp.net vb.net namevaluecollection

我正在开发一个非常简单的数据输入应用程序(在bootstrap中),使用ASP.net和VB.Net作为Visual Studio 2012 web中的代码。

假设我有以下html来获取名字:

   <form id="form1" runat="server">
    <div style="padding:20px">
      <div class="form-group">
        <label for="firstname">Firstname</label>
        <input type="text" class="form-control" id="firstname" name="firstname" placeholder="" style="max-width:450px" maxlength="60" />
        <small class="text-muted">Enter your first name.</small>
      </div>
      <button runat="server" type="submit" class="btn btn-primary" onserverclick="btnSubmit_ServerClick" >Submit</button>

    </div>
  </form>

以及处理其值的相应代码:

Protected Sub btnSubmit_ServerClick(sender As Object, e As EventArgs)
    Dim fname As String = Request.Form("firstname").ToString
End Sub

假设我不想在我的html firstname字段中使用runat="server"。 我看到Request.Form("firstname").ToString仅在我设置了标记name="firstname"时才有效。如果我只设置了id标记(而不是name标记),则不会将其考虑在内;在我的情况下,如果我的服务器端只有<input type="text" class="form-control" id="firstname" placeholder="" style="max-width:450px" maxlength="60" /> Request.Form("firstname"),则返回NULL。

我也试试Request.Form没有运气。我看到集合NameValueCollection由仅设置name标记的组件填充。

我的问题是,是否可以更改我的服务器代码以使用仅设置了ID的html组件?

1 个答案:

答案 0 :(得分:2)

当您选择不使用服务器端控件时,您将继续使用Request collection方法读取值。

后面的代码只能读取发送到后端的数据。如果您在自己喜欢的浏览器的“网络”选项卡中检查了您的请求(提交表单时请求的页面),您将找到显示已发送数据的部分。由于您没有在该输入字段上设置名称,因此数据不会发送到服务器。这就是你无法阅读的原因。该ID对发送到服务器的内容没有影响。该ID仅适用于客户端使用。它&#34;工作的原因&#34;当你添加Runat =&#34; server&#34;是因为框架将信息添加到名为&#34; __ VIEWSTATE&#34;的秘密隐藏输入字段中。 (或者什么)。

最后,HTML的工作方式,当您提交表单时,所有输入元素都以name = value的形式发送,因为您省略了名称,所以不会发送任何数据。

与帖子建议下面的评论一样,您确实应该考虑使用服务器端控件(runat =&#34; server&#34;)或将名称标签添加到表单元素中。

我知道很多人不喜欢asp.net webforms(实际上我也不是粉丝),但还有其他选择 - 逻辑转变将转移到asp.net mvc代替。无论你做什么,如果你选择退出框架细节,你必须遵守html5标准。

祝你好运:)