之一dissadvanced的asp.net web表单的是只有一个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>
替代就可以使后重定向,但需要更多的代码和一个中间页,创造支付宝发布数据在代码后面。这里是一个例子http://www.codeproject.com/Articles/37539/Redirect-and-POST-in-ASP-NET
同样的技巧,你可以用javascript做到这一点,创建一个使用JavaScript的表单,并将其发布到贝宝按钮,所有与JavaScript的同一页。
我已经使用了所有这些技术,它们都可以工作。
第一句话是误导性的。您只能使用'runat = server'来创建一个表单,但只要它们没有嵌套,您可以在一个ASP.NET页面中拥有多个表单。没有理由必须将整个文档包装在表单中,尽管这是大多数webforms模板的工作原理。 – MikeSmithDev 2013-04-29 18:00:07
@MikeSmithDev你有一点,我会改变它(或者你可以,如果你想纠正你所相信的) – Aristos 2013-04-29 18:08:29
我仍然没有想到这一点。但是我找到了这篇文章http://www.codeproject。com/Articles/36071/Implementing-Non-ASP-NET-Posts-in-ASP-NET和解决方案对我来说很完美,唯一的问题是我需要在一个页面上有5个按钮,不知道这是可能的这个解决方案可能? – 1110 2013-04-29 20:56:44