ASP.NET WebForms表单未发布 - 为什么?

时间:2013-08-01 05:10:11

标签: asp.net http webforms

虽然我不认为自己是网络程序员,但我已经做了大量的网络编程,所以我几乎不好意思问下面的代码有什么问题。 ASP.NET必须缺少一些基本的东西。

我有两个页面,source.aspx和destination.aspx:

source.aspx - html:

<body>
<form id="form1" action="destination.aspx" method="post" runat="server">
    <input id="Text1" type="text" />
    <input id="Text2" type="text" />
    <input id="Checkbox1" type="checkbox" />
    <input id="Submit1" type="submit" value="submit" />
</form>
</body>

destination.aspx - 代码隐藏:

    protected void Page_Load(object sender, EventArgs e)
    {
        // Below variable gets assigned null.
        string text1 = Request.Form["Text1"];
    }

当我提交source.aspx表单时,一旦到达destination.aspx表单,FORM变量中就没有信息。我认为表单'runat =“server”'将确保我最终进入ASP.NET页面管道,实际上我可以单步执行此代码。除了viewstate之外,没有POSTed表单变量,并且PARAMs集合也没有与控制数据相对应的任何内容,甚至没有与装饰控件名称相对应的变量。问题是,发生了什么让我的POST变量“消失”,至少到目标页面?

我不是在寻找替代方法如何使这项工作(即使用runat =“server”等控制服务器控件)。我可以解决这个问题。我想要确定的是“ASP.NET的内容是什么让我的控件看起来不会被目标页面接收。谢谢 - 我认为我非常了解HTTP,但是我似乎没有看到一些关于ASP.NET的礼貌,我没有看到。

2 个答案:

答案 0 :(得分:5)

您可以从表单标记中删除runat =“server”,因为您要退出ASP.NET为您提供的服务器控件。您基本上正确地认为这应该可以在不需要所有ASP.NET页面处理位的情况下工作。

这是您需要做的一个小改动 - 您需要在输入控件上使用'name'而不是'id',以便它们出现在Form集合中。这是一个微妙的事情,但我相信它不是ASP.NET独有的 - name属性指定了什么将值与POST变量集合相关联。

有关id与名称

的更多信息,请参阅HTML input - name vs. id 祝你好运

答案 1 :(得分:2)

Request.Form使用元素的name属性。因此,您应该为每个html元素编写名称属性。

<body>
<form id="form1" action="destination.aspx" method="post" runat="server">
    <input id="Text1" name="Text1" type="text" />
    <input id="Text2" name="Text2" type="text" />
    <input id="Checkbox1" name="Checkbox1" type="checkbox" />
    <input id="Submit1" type="submit" value="submit" />
</form>
</body>