aspx:表单始终转发到同一页面

时间:2010-09-21 18:57:15

标签: asp.net html-form

在product.aspx页面上的

我创建了一个表单:

<form id="send_info_form" method="post" action="send_email.aspx">
<input type="text" name="the_name />
<input type="submit" />
</form>

当我点击提交时,它被转发到同一页面(products.aspx)而不是我在表单的action属性中设置的页面。

2 个答案:

答案 0 :(得分:1)

在ASP.NET中,标签默认情况下始终将自身发布到同一页面。这允许您处理ASPX页面中代码隐藏中的任何事件。从你的问题中不清楚你究竟想要做什么。我可以想到三种可能的情况:

1)您希望回发到同一页面,并根据处理结果切换UI元素(其他面板等)的可见性,或者在处理完成后将用户重定向到第二个目标页面。这是最常见的场景,也是我建议采用的方法,因为它将关于表单处理的所有逻辑保存在一个地方。

2)您可以指定PostBackUrl为按钮控件和诸如此类的东西指定另一个(ASP.NET)页面。从那里,您可以使用PreviousPage属性从第二页的第一页上的元素进行处理。有关详细信息,请参阅http://msdn.microsoft.com/en-us/library/ms178139.aspx

3)如果你想要发布一个单独的页面,你不能控制它不是基于ASP.NET的(即,另一个站点的表单,或者你运行的PHP / ASP3.0站点)显然更难。 ASP.NET将所有内容放在一个巨大元素中。由于标签无法在HTML中可靠地嵌入到彼此中,因此您必须从代码隐藏中手动执行静默POST,或者在提交时使用Javascript静默提交ajax请求。

答案 1 :(得分:1)

看起来你对ASP.NET的逻辑运作方式存在误解 - ASP.NET与PHP或ASP有着截然不同的范例。

您似乎正在采用更多直接处理表单和POST值着陆页的ASP经典或PHP方法,您不再需要这样做。您不应该需要一个单独的页面来处理表单提交的逻辑;这都是由提交页面的代码隐藏中的事件处理程序处理的。

您应该使用ASP.NET的服务器控件来处理所有输入,而不是直接处理输入元素。

你应该做的是:

在Products.aspx页面中:

E-mail Address: <asp:TextBox runat="server" ID="txtEmail" />
<asp:Button runat="server" ID="btnSubmit" OnClick="btnSubmit_Click" Text="Submit" />

请注意,不需要表格标签(除了您首次制作ASPX页面时已经提供的标签。

由于您正在使用面向对象的语言,其中业务对象使用ASP.NET表示所有HTML元素,因此您无需直接处理表单的POST值。

在Products.aspx的代码隐藏中(我假设是C#,所以Products.aspx.cs),为btnSubmit_Click添加一个方法:

protected void btnSubmit_Click(object sender, EventArgs e) {
    string sendEmailTo = txtEmail.Text;
    // insert mail sending logic here
}