ASP.NET 4 网页表单嵌入另一个网页的页面中

3
我是新手程序员,正在尝试学习。我使用C#编写的asp.net Webform项目在Visual Studio 2010上运行。我试图在其中一个页面上实现PayPal的立即购买按钮,生成的代码也在表单标记中。无论是哪个按钮,页面上的第一个按钮从不起作用,并且下面有一条实线。所有其他按钮都可以正常工作。即使我删除它,下一个按钮也会成为页面上的第一个按钮,然后它也无法工作......我发现,由于所有页面都是表单且生成的代码也是表单,我不能在表单内部嵌入另一个表单。这是正确的吗?
是否有任何绕过此问题的方法?我只知道一些HTML和CSS,并正在尝试学习JavaScript,C#,XML,CSS,ASP.NET以及Visual Studio本身。如果有帮助的话,将不胜感激。如果有人想要看看我所说的,请访问www.curbappealfordummies.net/Packages.aspx。那是我正在工作和担任网站管理员的网站...谢谢你们的帮助。

这是一个太大的问题无法回答,但是你的“我无法在一个表单内部创建另一个表单”的陈述基本上是正确的。虽然有一些变通方法,但都不可取(尤其是对于初学者来说)。 - RPM1984
3个回答

1

这是一个广泛的问题,但可能的答案之一是生成一个第二个表单,其中包含所需的PayPal代码。

这是一个简化的例子;通常需要逻辑来引导到这一点。例如,如果按钮需要包含在ASP.Net默认表单中,则需要服务器和/或客户端代码将它们连接到此第二表单,并确保它包含正确的隐藏值。

在您的WebForm中

<form id="form1" runat="server">
<!-- Contents of your server form -->    
</form>
<%=base.GetMarkupOutsideDefaultForm() %>

在您的 CodeBehind 中

public string GetMarkupOutsideDefaultForm()
        {
            //
            // Return the markup needed for a PayPal form, 
            // including javascript needed to automatically submit it.
            // AppSettings can be any configuration object that contains
            // the needed URL (or you can hardcode it)
            StringBuilder sb = new StringBuilder();
            sb.Append( "<form action=\"" + AppSettings.PayPalUrl + "\" method=\"post\" id=\"frmPayPal\" target=\"_blank\">" );

            // add hidden PayPal fields

            sb.Append( "</form>" );

            sb.Append( "<script type=\"text/javascript\">document.forms[\"frmPayPal\"].submit();</script>" );

            return sb.ToString();
        }

如果逻辑比较复杂,第二个代码块应该放在一个帮助类中。
希望这能让某人走上正确的道路。

1

我现在正在阅读大量的教程、电子书和视频,这就是我在三周内从一无所知到达到这个水平的方法...谢谢,我也会查看那个链接的。 - W S G Electronics

0

我知道你的意思。尝试在顶部添加一个额外的

<form action='https://www.paypal.com/cgi-bin/webscr' method='post' target='paypal'></form>

示例:

<form id="form1" runat="server">
  <div>
    <form action='https://www.paypal.com/cgi-bin/webscr' method='post' target='paypal'>
    </form>
  </div>
  <div>
    <form action='https://www.paypal.com/cgi-bin/webscr' method='post' target='paypal'>
      <input type='hidden' name='add' value='1'>
      <input type='hidden' name='cmd' value='_cart'>
      <input type='hidden' name='business' value='<%# DataBinder.Eval(Container.DataItem, "business_email") %>'>
      <input type='hidden' name='no_shipping' value='0'>
      <input type='button' name='submit' value='Add To Cart' title='Add to Cart Button'>
    </form>
  </div>
</form>

简单,但它有效。

或者,如果你不喜欢这个想法,可以尝试这篇文章:


尝试过了,只能在页面首次加载时有效,之后它只会刷新页面。 - W S G Electronics

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接