我有一个html页面,我正在转换为asp .net页面。此页面包含一个访问我无法控制的外部网站的表单。下面有一些示例代码:
<asp:Content ID="sample" ContentPlaceHolderID="body" Runat="Server">
<form name="Subscribe" method="post" action="http://anexternalwebsitehere.com/subscribe.asp">
<input type="text" name="email" size="45" maxlength="120" />
<input type="submit" name="submit" value="Subscribe" />
</form>
</asp:Content>
表单比我提供的示例更复杂,但它大致了解了我需要转换的内容。以下是我遇到的问题。
如果我保留原样: 当您单击提交按钮时,您将回发到当前页面而不是外部页面
如果只是将所有内容转换为asp格式控件并更改回发网址 id变成了一些令人费解的“ctl00_body_ctl00”,外部页面无法解释。
注意:我确实需要该页面是一个aspx页面,因为我在页面上使用其他内容的母版页。
附加说明:这不是Microsoft MVC。
我错过了什么?
答案 0 :(得分:5)
问题在于其他人提到的嵌套表格。
我只需执行以下操作即可解决所有问题:
旧代码如下:
<asp:Content ID="sample" ContentPlaceHolderID="body" Runat="Server">
<form name="Subscribe" method="post" action="http://anexternalwebsitehere.com/subscribe.asp">
<input type="text" name="email" size="45" maxlength="120" />
<input type="submit" name="submit" value="Subscribe" />
</form>
</asp:Content>
新代码:
<asp:Content ID="sample" ContentPlaceHolderID="body" Runat="Server">
<input type="text" name="email" size="45" maxlength="120" />
<input type="submit" name="submit" value="Subscribe" />
<asp:button postbackurl="http://anexternalwebsitehere.com/subscribe.asp" text="Subscribe" runat="server" />
</asp:Content>
这解决了无效嵌套表单的任何问题,因为没有。它还解决了asp .net重命名asp元素的问题,因为重命名的唯一控件是asp按钮控件,这对于提交成功不是必需的。
答案 1 :(得分:2)
由于你的主页上可能有你的contentplaceholder上的服务器表单标签,你声明的这个新表单将放在服务器表单中(通过服务器表单,我的意思是一个asp.net用于使用runat的回发) = “服务器”)
我有一些情况,当我需要一个已经有服务器格式的aspx页面上的特殊非服务器表单时,我解决问题的方法是将这个非服务器表单放在服务器表单之外 - 我的意思是,将它放在服务器表单之后。由于您使用的是高级页面,因此您需要在该母版页上使用新的contentplaceholder,您可以将其命名为“noform”。它位于服务器表单之后,因此放入此noform的任何内容都将放在服务器表单之外。这意味着没有asp.net控件可以在这个特定的contentplaceholder(noform)中工作,因为它们不会被框架选中,但是你可以在那里放置你的非服务器表单并在那里做你的魔术。
答案 2 :(得分:1)
正如您可能已经猜到的那样,问题在于您在另一个表单中有一个表单 - 即遗留表单出现在母版页所需的ASP.NET表单中。
解决此问题的一种快速(如果相当笨重)方法是关闭旧表单上方的ASP.NET表单,然后在旧表单下方打开一个新表单。这意味着您在页面上有三个表单,其中没有一个是嵌套的。
所以你最终得到这样的东西:
<asp:Content ID="sample" ContentPlaceHolderID="body" Runat="Server">
</form>
<form name="Subscribe" method="post" action="http://anexternalwebsitehere.com/subscribe.asp">
<input type="text" name="email" size="45" maxlength="120" />
<input type="submit" name="submit" value="Subscribe" />
</form>
<form method="post" action="myAspNetPage.aspx">
</asp:Content>
开始时关闭</form>
标记会从母版页关闭ASP.NET。然后你有你的表格,现在应该按预期工作。然后,最后打开的<form>
标记只会确保母版页中的结束</form>
标记是有效的HTML。
显然,遗留表单后出现在母版页上的任何内容都不在标准的ASP.NET表单中,因此这可能对您不起作用,具体取决于页面其余部分的结构。
这不是一个特别优雅的解决方案,但它可以作为一个快速修复(取决于您的母版页上的其他内容)。我们已经在拥有数百页的网站上需要一个遗留表单的地方使用它,所以我们只想要一次性修复,而不是任何影响母版本身的东西。
在我们的情况下,我们无法更改旧版表单,因为它是由第三方提供的,经常更改,并且需要在没有开发人员参与修改的情况下被放入ASP.NET页面(例如,反对布莱恩对他自己的问题的解决方案,这个问题需要编辑表格,在他的情况下显然是一个更好的选择 - 并且可能在大多数其他存在类似问题的情况下。)
答案 3 :(得分:-1)
您的按钮的点击事件将处理提交的网址和数据。
//C# source
protected void button_Click(object sender, EventArgs e)
}
string customURL = "http://anexternalwebsitehere.com/";
string emailValue = textBoxEmail.Text; //of course validate this for proper email...
customURL += "page.aspx?email=" + emailValue;
Response.Redirect(customURL);
}