【问题标题】:request.form elements is nullrequest.form 元素为空
【发布时间】:2015-05-07 13:17:00
【问题描述】:

我有一个简单的 asp.net 网络表单,将其发布到另一个页面后,request.form 集合似乎是空的。我不确定我做错了什么。

表格:

<form runat="server" id="myform" action="submitForm.aspx" method="post">
    <input type="text" class="form-control col-xs-6" name="myName"/> 
    <button type="submit" class="btn btn-default" id="submitbtn">Submit</button>
</form>

在我的 submitForm.aspx 页面加载时,我有:

  Response.Write(Request.Form["myName"].ToString());

这只会创建一个空引用异常。

我的文本框中没有 runat server 元素,我不想要它们。虽然,在 Google 开发者工具中,我可以看到 myName 发布了正确的值。有任何想法吗?

【问题讨论】:

  • 要让Request.Form[""] 工作,您的控件应该是服务器端控件,因此您的控件上应该有runat="server" 属性。
  • 我不确定是不是这样..无论如何..我添加了 runat="server" 但它仍然没有工作。
  • 试试Request.Form("myName")
  • 当我尝试那个错误:不可调用的成员'System.Web.HttpRequest.Form'不能像方法一样使用

标签: html asp.net forms


【解决方案1】:

如前所述,如果您想使用HttpRequest 对象检索值,您的控件应该是服务器端控件,因此您首先应该添加runat="server" 标记。

其次,由于它现在是服务器端控件,ASP.NET 使用服务器端控件的命名约定,这将更改您的name 属性(您可以通过检查页面来源来验证这一点)。要正确呈现name 属性,您需要指定控件的id 属性,这将自动为您添加名称属性。

<input type="text" class="form-control col-xs-6" id="myName" runat="server" />

将呈现为:-

 <input name="myName" type="text" id="myName" class="form-control col-xs-6" />

现在,您的代码将按预期工作:-

Request.Form["myName"]

编辑:

由于您使用的是母版页,ASP.NET 不仅会修改id,还会修改name 属性。如果您使用ASP.NET 4,您可以使用clientidmodeid 设为静态:-

<input type="text" class="form-control col-xs-6" id="myName" runat="server" 
clientidmode="Static" />

但仍然无法更改 name 属性,因此您需要执行类似这样的 Javascript:-

$(function () {
      $("#myName").attr("name", "myName");
});

在这之后它应该对你有用。

【讨论】:

  • 我的代码和你提到的一样。出于某种原因,我仍然收到空引用异常。我正在使用母版页,因此名称属性已重命名。我在另一个页面上使用重命名的版本,但它仍然无法正常工作。这让我发疯了。
  • 我只是要使用代码隐藏来捕获值..(Request.Form 工作正常,然后没有任何 runat="server")我将在后面的代码中处理,然后重定向到第二页。 !我仍然不确定为什么在发布到其他页面时它不起作用。
  • @cableload - 对答案不满意? ;)
猜你喜欢
  • 1970-01-01
  • 2021-09-06
  • 2012-02-01
  • 1970-01-01
  • 2021-10-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-08
相关资源
最近更新 更多