asp.net webforms 的缺点之一是在正常的 asp.net 页面中只允许使用一个 asp.net 表单。一种runat="server"
只有 asp.net 控件才能正确工作并与后面的代码配合使用的表单。
但是,您可以打破这一点 - 但不能继续拥有相同的 asp.net 功能。您可以做的是使用 LiteralControl 并直接在页面上呈现 PayPal 按钮代码,并且仅在使用</form>
. 只有在添加新的之前关闭。
现在你这样做的那一刻,你必须忘记在同一页面上的帖子,实际上只将它用于发布到 PP。拥有一些 asp.net 页面功能的唯一方法是在第一个表单关闭之前保留它,并在 web.config 上设置将验证保留在顶部的选项。
所以你从
<form name="aspnetForm" method="post" action="/ui/login.aspx?ReturnUrl=General.aspx" >
... some controls that post back to aspx page
</form>
你最终得到
<form name="aspnetForm" method="post" action="/ui/login.aspx?ReturnUrl=General.aspx" >
... some controls that post back to aspx page
... up to here maybe the buttons will work for the page, after that not any more
</form> //<---- added by you
// follow the PayPal buttons
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" ... >
</form>
// second button, etc
<form action="https://www.paypal.com/cgi-bin/webscr" method="post" target="_top">
<input type="hidden" name="cmd" ... >
</form>
// now this close form is orphan....
</form>
或者,您可以进行帖子重定向,但需要更多代码和在后面的代码上创建 PayPal 帖子数据的中间页面。这是一个示例http://www.codeproject.com/Articles/37539/Redirect-and-POST-in-ASP-NET
您可以使用 javascript 执行相同的技巧,使用 javascript 即时创建表单并将其发布到 paypal 按钮,所有这些都使用 javascript 在同一页面上。
我已经使用了所有这些技术,它们都有效。