【问题标题】:Request.Form works only on name tags?Request.Form 仅适用于名称标签?
【发布时间】:2016-06-03 08:48:53
【问题描述】:

我正在开发一个非常简单的数据输入应用程序(在引导程序中),使用 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 名字字段中使用 runat="server"。 我看到Request.Form("firstname").ToString 仅在我设置标签name="firstname" 时才有效。如果我只设置了id 标签(而不是name 标签),它不会考虑它;在我的情况下,如果我的服务器端只有 &lt;input type="text" class="form-control" id="firstname" placeholder="" style="max-width:450px" maxlength="60" /&gt; Request.Form("firstname"),则返回 NULL。

我也尝试Request.Form,但没有成功。我看到集合 NameValueCollection 由仅设置了 name 标记的组件填充。

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

【问题讨论】:

  • 我建议使用server controls(文本框、按钮等),以便您可以通过强类型访问它们的值。
  • 不,在请求中你只会得到名称值对,id 不是发送到服务器的东西
  • @UweKeim 感谢您的建议。我同意,但我的问题只是出于知识目的,假设我们现有的代码具有数百个以这种方式设置的 html 字段。
  • 维护遗留代码的乐趣……
  • @UweKeim 正是我的朋友...:s!

标签: html asp.net vb.net namevaluecollection


【解决方案1】:

当您选择不使用服务器端控件时,您将使用读取值的请求收集方法。

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

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

就像您帖子下方的 cmets 所建议的那样,您确实应该考虑使用服务器端控件 (runat="server") 或将名称标签添加到您的表单元素中。

我知道很多人不喜欢 asp.net 网络表单(实际上我也不是粉丝),但还有其他选择 - 逻辑转变是改用 asp.net mvc。无论您做什么,如果您选择退出框架细节,您都必须遵守 html5 标准。

祝你好运:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-31
    • 1970-01-01
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多