在 C# 的代码隐藏中创建和发布表单的最佳方法

Posted

技术标签:

【中文标题】在 C# 的代码隐藏中创建和发布表单的最佳方法【英文标题】:Best way to create and post a form in codebehind in C# 【发布时间】:2013-11-22 17:26:08 【问题描述】:

我正在使用网络表单,我需要为我的一位客户创建并POST 一个 http form 到支付网关。我正在使用一个显示在母版页中的用户控件,但是他们已经在页面上有一个现有的<form>,所以我很确定我不能再添加一个。

在 C# 中从后面的代码创建和发布表单的最佳实践方法是什么?目前我有以下内容:

var nvc = new System.Collections.Specialized.NameValueCollection
    
        "EWAY_ACCESSCODE", ewayResponse.AccessCode,
        "EWAY_CARDNAME", txtCcName.Text,
        "EWAY_CARDNUMBER", txtCcNumber.Text,
        "EWAY_CARDEXPIRYMONTH", ddlCcExpMonth.SelectedValue,
        "EWAY_CARDEXPIRYYEAR", ddlCcExpYear.SelectedValue,
        "EWAY_CARDCVN", txtCcv.Text
    ;

    var client = new WebClient();
    client.UploadValues(ewayResponse.FormActionURL, nvc);

这确实有效,但有更好/替代的方法吗?

【问题讨论】:

cooooooooooooooooo,这可能会提供一些见解:***.com/questions/5401501/… 【参考方案1】:

除了之前的建议:

为什么(更简单的)Button.PostbackUrl 不起作用?

<asp:Button ID="externalPost" runat="server" PostBackUrl="http://www.somewhere.com/" Text="Post Somewhere" />

另外,假设您指的是支付网关,您正在执行服务器端 POST,这对 PCI 合规性 有影响(与来自客户端/浏览器的直接表单发布相比)。

Hth.

【讨论】:

我同意 PCI 的东西,这就是为什么我想找到更好的解决方案。那么最好的选择是爱尔兰酋长的解决方案吗?还是有更优雅的方式来做到这一点? @AlexFrame 如上所述,Button.PostBackUrl 不起作用的任何原因?它会做的实际上是直接发布到您设置的 url,解决 PCI 问题。我没有尝试过下面的建议,但是快速阅读代码可以让您删除服务器端的&lt;form/&gt; 标签。当然,这也意味着其他一些代码可能会受到影响(例如页面上依赖默认回发行为的其他控件),然后您需要对其进行调整。 它“切换”表单标签,因此不会影响其他控件。我在我开发的五个不同的电子商务网站中使用了它。您可以使用 javascript,前提是它已在所有客户端上启用。唯一的其他解决方案是添加第二对表单标签,这是一个没有人解释的黑客;-)【参考方案2】:

这是我使用的解决方案:

http://jerschneid.blogspot.com/2007/03/hide-form-tag-but-leave-content.html

警告(自己的博文):

http://codersbarn.com/post/2008/03/08/Solution-to-ASPNET-Form-PayPal-Problem.aspx

【讨论】:

以上是关于在 C# 的代码隐藏中创建和发布表单的最佳方法的主要内容,如果未能解决你的问题,请参考以下文章

如何在 C++ 中创建和初始化双精度的 SAFEARRAY 以传递给 C#

在 C# 的代码隐藏中创建具有值的表脚本

AngularJS:防止验证隐藏的表单字段

如何在 C# 中隐藏包含用户控件的表单?

如何将在我的 Javascript 中创建的字符串数组传递给 C# 代码隐藏文件?

如何使用相同的表单在 ruby​​ on rails 中创建和编辑