题
由于具有经典 ASP 背景,我习惯了一个页面上有多个表单,但这显然仅限于 ASP.NET 页面。
然而,我有一种情况,我有一个表单收集用户的输入,将数据保存到数据库,然后我想渲染(并调整其值)一个发布到 PayPal 网站的特殊表单。
如果 PayPal 表单的字段值是静态的,就不会有问题,但由于我想在服务器端操作表单(调整数量、描述、价格字段等),所以 将要 成为一个问题。
我正在考虑在写入数据库后重定向到不同的页面,我怀疑这会工作得相当好,但这是一些额外的努力,可能是不必要的。
还有人建议我可以通过编程方式呈现不同的表单,具体取决于我所处的周期位置。也就是说,使用占位符,在 Page_Load 上我将首先添加一个 DB 表单(包含子控件),并在回发后添加 PayPal 表单。
这种情况对你们来说一定很常见,所以如果您有首选方法,我正在寻找意见建议和任何相关的代码示例。
我知道我可以过得去,但这个项目是一个学习工具,所以我想采用最佳实践。
提前致谢...
克里斯
解决方案
您可以有多种形式,只是只有一种形式可以具有 runat="server"
属性。
让 PayPal 发挥作用有很多答案;但由于它是一种学习工具,因此可能会作弊。老实说,我会考虑完整的 PayPal API,而不是使用有点简单形式的方法(还有一个额外的优点,它应该可以扩展您的学习范围)。
否则,可以,在服务器端表单之外设置一个 HTML 表单,并向其中添加文字并在其中写入一些内容。
其他提示
基本方法是在页面上使用两个面板 - 一个用于第一个表单,另一个用于第二个表单。
您可以根据要显示的表单(在 page_load 期间或渲染之前的任何时间)更改这些面板的可见性属性。
也许我误解了这个问题,但是你不能在表单中简单地放置 2 个 div,而任何时候只有一个是可见的。例如
<form id="Form1" method="post" runat="server">
<div id="getUserInput" visible="true">
<asp:button id="btnSubmitFirst" />
</div>
<div id="doSubmissionToPaypal" visible="false">
<asp:button id="btnSubmitSecond" />
</div>
</form>
然后,在 btnSubmitFirst_Click 中:
doSubmissionToPaypal.visible=True
getUserInput.visible = false
类似的事情吗?
此贝宝的解决方法是使用 贝宝集成代码 因为 Paypal 并不总是最容易集成的。艰苦的工作基本上已经为你完成了。