我有一个简单的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
以正确的值发布。有任何想法吗?
答案 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");
});
在此之后它应该适合你。