1

虽然我不认为自己是一名网络程序员,但我已经完成了大量的网络编程,所以我几乎不好意思问下面的代码有什么问题。我必须缺少一些关于 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 集合也没有任何与控件数据对应的内容,甚至没有与修饰控件名称对应的内容。问题是,发生了什么让我的 POSTed 变量“消失”,至少到目标页面?

我不是在寻找如何使这项工作的替代方案(即使用 runat="server" 等制作控件服务器控件)。我可以解决问题。我要确定的是 ASP.NET 是什么使我的控件看起来无法被目标页面接收。谢谢 - 我认为我对 HTTP 理解得很好,但似乎有一点我没有看到的 ASP.NET 的花招。

4

2 回答 2

5

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

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

有关id 与名称的更多信息,请参阅HTML 输入 - 名称与 id

祝你好运

于 2013-08-01T06:54:25.140 回答
3

Request.Form uses name attribute from elements. So you should write name attributes to each of the html elements.

<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>
于 2013-09-23T02:50:13.870 回答