use*_*111 5 asp.net-mvc html-helper authorize.net razor
我正在创建一个非盈利捐赠平台,我第一次使用MVC.我大部分时间都掌握了它,但现在我遇到了一个我不知道如何解决的问题.我正在使用AthorizeNet.Helpers类,当我从expamples添加代码时,它大部分都有效,除了它采用表单并将其放在标签上,但它将表单字段放在正确的位置.我正在试图弄清楚如何在正确的位置渲染标记.
@using AuthorizeNet.Helpers;
@using (Html.BeginSIMForm("http://127.0.0.1:4768", 1.99M, "xxx_key", "yyy_key", true))
{
@Html.Raw(Html.CheckoutFormInputs(true))
@Html.Hidden("order_id", "1234")
<input type = "submit" value = "Pay" />
}
Run Code Online (Sandbox Code Playgroud)
这是它在HTML输出中的外观:
<form action = 'https://test.authorize.net/gateway/transact.dll' method = 'post'>
<input type = 'hidden' name = 'x_fp_hash' value = '6bef386eaa89944efd62b47b86042910' \>
<input type = 'hidden' name = 'x_fp_sequence' value = '117'\>
<input type = 'hidden' name = 'x_fp_timestamp' value = 'xxx_key' \>
<input type = 'hidden' name = 'x_login' value = 'yyy_key' \>
<input type = 'hidden' name = 'x_amount' value = '1.99' \>
<input type = 'hidden' name = 'x_relay_url' value = 'http://127.0.0.1:4768' \>
<input type = 'hidden' name = 'x_relay_response' value = 'TRUE' \>
</form><!DOCTYPE html>
<html>
<body>
<h2>Payment Information</h2>
<div style = 'border: 1px solid #990000; padding:12px; margin-bottom:24px; background-color:#ffffcc;width:300px'>Test Mode</div>
<div style = 'float:left;width:250px;'>
<label>Credit Card Number</label>
<div id = 'CreditCardNumber'>
<input type = 'text' size = '28' name = 'x_card_num' value = '4111111111111111' id = 'x_card_num'/>
</div>
</div>
<div style = 'float:left;width:70px;'>
<label>Exp.</label>
<div id = 'CreditCardExpiration'>
<input type = 'text' size = '5' maxlength = '5' name = 'x_exp_date' value = '0116' id = 'x_exp_date'/>
</div>
</div>
<div style = 'float:left;width:70px;'>
<label>CCV</label>
<div id = 'CCV'>
<input type = 'text' size = '5' maxlength = '5' name = 'x_card_code' id = 'x_card_code' value = '123' />
</div>
</div><input id="order_id" name="order_id" type="hidden" value="1234" /> <input type = "submit" value = "Pay" />
Run Code Online (Sandbox Code Playgroud)
Epi*_*Dev 12
这是我修复它的方式.
如你所说,在Html.CheckoutFormInputs周围添加@ Html.Raw()(true)
要做的另一个改变是
namespace AuthorizeNet.Helpers -> CheckoutFormBuilders.cs
Run Code Online (Sandbox Code Playgroud)
添加一个使用
using System.IO;
Run Code Online (Sandbox Code Playgroud)
更改
HttpResponseBase to TextWriter
Run Code Online (Sandbox Code Playgroud)
我在三个地方做到了这一点.
HttpResponseBase _response; to TextWriter _response;
public SIMForm(TextWriter response, string returnUrl, decimal amount,
string apiLogin, string transactionKey)
:this(response,returnUrl,amount,apiLogin,transactionKey,true){}
public SIMForm(TextWriter response, string returnUrl, decimal amount,
string apiLogin, string transactionKey, bool isTest) {
_response = response;
_amount = amount;
_apiLogin = apiLogin;
_transactionkey = transactionKey;
_returnUrl = returnUrl;
_isTest = isTest;
OpenForm();
}
Run Code Online (Sandbox Code Playgroud)
还剩下两个变化
按照tpeczek的回答,你需要改变
helper.ViewContext.HttpContext.Response
Run Code Online (Sandbox Code Playgroud)
至
helper.ViewContext.Writer
Run Code Online (Sandbox Code Playgroud)
这看起来像
public static SIMForm BeginSIMForm(this HtmlHelper helper, string returnUrl,
decimal amount, string apiLogin,
string transactionKey) {
return new SIMForm(helper.ViewContext.Writer,
returnUrl,amount,apiLogin,
transactionKey,true);}
public static SIMForm BeginSIMForm(this HtmlHelper helper, string returnUrl,
decimal amount, string apiLogin,
string transactionKey, bool isTest) {
return new SIMForm(helper.ViewContext.Writer,
returnUrl, amount, apiLogin,
transactionKey,isTest);}
Run Code Online (Sandbox Code Playgroud)
当为ASP.NET MVC 1编写直接写入输出流的帮助程序时,通常会发生这种问题(并且使用时封闭的帮助程序在大多数时间直接写入输出流).在ASP.NET MVC 1中,您可以使用以下命令写入输出流:
htmlHelper.ViewContext.HttpContext.Response.Output
Run Code Online (Sandbox Code Playgroud)
在以后的ASP.NET MVC版本中,你应该使用这个:
htmlHelper.ViewContext.Writer
Run Code Online (Sandbox Code Playgroud)
这确保了Razor的兼容性.如果您可以访问AuthorizeNet.Helpers源代码,则可以自行修复,如果不是,则必须联系作者进行修复.
| 归档时间: |
|
| 查看次数: |
3085 次 |
| 最近记录: |