【问题标题】:Form GET in ASP.NET在 ASP.NET 中形成 GET
【发布时间】:2024-05-23 23:55:01
【问题描述】:

我正在尝试将经典 ASP 页面转换为 ASP.NET 3.5。

在页面上,有一个小表格可以将您的电子邮件地址提交到外部通讯网站。代码如下:

<form name="emailForm" action="http://www.site.com/emailsignup.aspx" method="get">
    <input type="text" name="email" />
    <input type="submit" id="btnSubmit" name="btnSubmit" />
</form>

我希望我能够将它放在页面上并且它会起作用,但它没有,它只是重新加载页面。

我该怎么做呢?是否需要在按钮的点击事件后面的代码中完成?

【问题讨论】:

  • 你的页面文件名是什么?
  • 您有包含整个页面的表格吗?这会破坏它,因为您不能在表单中包含表单。
  • @Kirk - Default.aspx,在根目录中。
  • 会点击“site.com/emailsignup.aspx?email=john@smith.com”将电子邮件地址订阅到邮件列表吗?而且,您是否尝试在不重新加载页面的情况下为用户订阅电子邮件列表?或者您希望页面重新加载,但用户随后会订阅电子邮件列表?
  • 是的,这真的很想问你为什么要使用 GET 来完成这个...... @Steven:这正是 method="get" 的用途。

标签: c# asp.net asp-classic


【解决方案1】:

在 ASP.Net 中,默认情况下,如果您将页面上的 action 属性设置为另一个文件,则导致回发的控件(如按钮)会将页面提交回自身EVEN。您想要的称为跨页发布。以下 MSDN 页面向您展示了如何使用 ASP.Net 4 执行此操作,但顶部有一个链接可以访问旧版本:

http://msdn.microsoft.com/en-us/library/ms178140.aspx

http://msdn.microsoft.com/en-us/library/ms178139.aspx

否则你可以在后面的代码中使用按钮的点击事件处理程序。

希望这会有所帮助。

【讨论】:

  • 我怀疑这仅对所有控件通常嵌套的表单有效。添加不同的表单(在 ASP.NET 使用的表单之外)不会有这些限制。你知道吗?
  • 我假设您的意思是添加一个不带 runat="server" 的附加表单,因为一个页面中不能有多个服务器端表单。如果这就是您的意思,那么您是正确的,它不会回发,但是您将无法使用服务器端控件或具有普通表单的视图状态。问题是我相信 OP 已经在服务器表单中插入了 html 表单,不推荐这样做。根据结果​​,似乎外部服务器表单正在接管并回发。
【解决方案2】:

你必须在表单标签中缺少runat="server"

尝试通过IDE创建一个页面,在表单标签之间粘贴输入标签的代码

<input type="text" name="email" />
<input type="submit" id="btnSubmit" name="btnSubmit" />

【讨论】:

  • 为什么 runat="server" 会改变 client 端发生的事情。表单的回邮到达了错误的服务器。 IE。页面来自的那个,而不是 action 属性中指定的那个。
【解决方案3】:

它肯定是以 aspx 默认形式嵌套的结尾。

根据您的页面布局,您可以对其进行修改,以免以嵌套形式结束。如果这不可能,我认为您无法使用表单,因此您必须寻找不同的解决方案,例如使用 js 构建 get。

【讨论】:

    【解决方案4】:

    最简单的方法是将&lt;form&gt; 标记放在通常包装所有ASP.NET 控件的主要&lt;form runat="server"&gt; 标记之外。

    如果您使用的是母版页,并且您可以使用的唯一内容占位符位于该 &lt;form runat="server" 标记内,或者您需要在主 &lt;form runat="server"&gt; 标记内的页面结构中使用此表单标记,那么您需要:

    取出简单的&lt;form&gt; 标签,但留下HTML &lt;input&gt; 标签。处理提交按钮的客户端 onclick 事件(JavaScript 版本,而不是 ASP.NET 回发处理程序)。该处理程序应该从文本框中获取电子邮件并在 Javascript 中发出类似 window.location = 'http://www.site.com/emailsignup.aspx?email=....' 的内容。确保取消默认的 HTML 按钮操作处理程序,这样它就不会冒泡并提交 ASP.NET 表单。

    【讨论】: