request.form元素为null

时间:2015-05-07 13:17:01

标签: html asp.net forms

我有一个简单的asp.net webform,在将其发布到另一个页面后,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服务器元素,我不想要它们。虽然,在Google Developer Tools中,我可以看到myName以正确的值发布。有任何想法吗?

1 个答案:

答案 0 :(得分:0)

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

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

<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,则可以使用clientidmode使id静态: -

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

但是仍然无法更改name属性,所以你需要做这样的Javascript: -

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

在此之后它应该适合你。