Paypal 表单破坏了我的 ASP.NET 网络表单布局 -> 如何解决?

Posted

技术标签:

【中文标题】Paypal 表单破坏了我的 ASP.NET 网络表单布局 -> 如何解决?【英文标题】:Paypal Form Ruins My ASP.NET webforms layout -> How to Solve? 【发布时间】:2011-11-17 04:25:55 【问题描述】:

我是一名学生,正在 asp.net 中建立一个简单的网站。我的问题是,我希望将 Paypal 集成到其中一个页面上,但是 asp.net 的 ridiculous <form runat="server"> 妨碍了我。我正在使用蓝图 css 构建一个简单的站点布局,这是一个非常基本的三列布局。但是,我需要我的主要内容部分能够使用 paypal 表单(立即购买按钮),以及网站的其他区域才能使用用户控件,我认为这需要将它们包装在那个烦人的表单标签中。事实上,我想在网站主要部分的顶部有一个站点地图路径控件:非常基本的东西。我怎样才能做到这一点?我的问题是:我无法将 Paypal 按钮放入表单中,而且我不知道如何将第 4 个 div 移动到位。我什至不确定 div 和表单是如何相互堆叠的。

请问有什么可以帮忙的吗?

有问题的页面是:http://clubofpep.org/sandbox/sandbox_Alumni.aspx。

【问题讨论】:

【参考方案1】:

与流行的看法相反,您可以在 ASP.Net 网络表单页面上拥有多个表单。你不能做的是有多个带有 runat="server" 的表单,在 ASP.Net 的主表单中嵌套第二个表单,或者在主表单之外使用 asp.net 服务器控件。

因此,要将单独的 paypal 表单与 asp.net webforms 页面的其余部分集成,您必须确保可以将其放在 asp.net web 的 all 之前或之后控制页面上的控件,然后编辑 aspx 标记以确保您的 paypal 表单完全在 asp.net 的表单之外。

另一件事是,快速的网络搜索会显示大量为 asp.net 编写的 paypal 控件,这些控件将与所需的 asp.net 表单一起使用以提交付款。您可以随时尝试其中一种。

【讨论】:

我想知道
标签是否被视为单独的 div,因为我在样式方面遇到了一些问题。另外,我似乎没有找到“大量的贝宝控件”。我发现的主要是 2. 来自 ComponentOne 的“免费”控件,它需要一个 PayPal 商业帐户,以及不太便宜的 ASP.Net Paypal Button 控件。你还知道其他人吗?
@Raphael - 表单标签是块级元素,就像任何其他块级元素一样。所以,是的,它有点像另一个 div 标签。 asp.net paypal control 的 google 为我返回的结果在第一页上至少有 4 个不同的控件。 @Joel,很好的解释。我正在发布我遇到的另一个替代方案 - 创建自定义 htmlForm :)【参考方案2】:
namespace CustomForm

    public class GhostForm : System.Web.UI.HtmlControls.HtmlForm
    
        protected bool _render;

        public bool RenderFormTag
        
            get  return _render; 
            set  _render = value; 
        

        public GhostForm()
        
            //By default, show the form tag
            _render = true;
        

        protected override void RenderBeginTag(HtmlTextWriter writer)
        
            //Only render the tag when _render is set to true
            if (_render)
                base.RenderBeginTag(writer);
        

        protected override void RenderEndTag(HtmlTextWriter writer)
        
            //Only render the tag when _render is set to true
            if (_render)
                base.RenderEndTag(writer);
        
    

用法:

ASPX:

<%@ Register TagPrefix="CF" Namespace="CustomForm" Assembly="CustomForm" %>
<body>
    <CF:GhostForm id="mainForm" runat="server">
    ...
</body>

<img src="https://www.sandbox.paypal.com/en_US/i/btn/btn_xpressCheckout.gif"> <asp:Button ID="checkoutBtn" runat="server" OnClick="CheckButton_Click"
    Text="Checkout" Width="100" CausesValidation="false" /> 

代码隐藏:

protected void Page_Load(object sender, EventArgs e)

    ...
    // Workaround for PayPal form problem
    GhostForm mainForm = new GhostForm();
    mainForm.RenderFormTag = false;
    // Go ahead and submit to PayPal :)

【讨论】:

以上是关于Paypal 表单破坏了我的 ASP.NET 网络表单布局 -> 如何解决?的主要内容,如果未能解决你的问题,请参考以下文章

Windows 8.1 / Windows 10 破坏了我的 ASP.NET / IIS:“服务不可用”

如何使 paypal 按钮在 asp.net webform 中工作

ASP.Net WebForms + Paypal 表单

asp.net 中的 Paypal 表单标签问题

如何克服为贝宝按钮 asp.net 嵌入 html 表单

使用 asp.net 和 C# 集成 Paypal [关闭]