我正在尝试使用razor中的mvc4进行支付网关集成。因为我需要调用带有预填表格的页面。
使用以下方法,我正在形成post方法表单:
private static string PreparePOSTForm(string url, System.Collections.Hashtable data) // post form
{
//Set a name for the form
string formID = "PostForm";
//Build the form using the specified data to be posted.
StringBuilder strForm = new StringBuilder();
strForm.Append("<form id=\"" + formID + "\" name=\"" +
formID + "\" action=\"" + url +
"\" method=\"POST\">");
foreach (System.Collections.DictionaryEntry key in data)
{
strForm.Append("<input type=\"hidden\" name=\"" + key.Key +
"\" value=\"" + key.Value + "\">");
}
strForm.Append("</form>");
//Build the JavaScript which will do the Posting operation.
StringBuilder strScript = new StringBuilder();
strScript.Append("<script language='javascript'>");
strScript.Append("var v" + formID + " = document." +
formID + ";");
strScript.Append("v" + formID + ".submit();");
strScript.Append("</script>");
//Return the form and the script concatenated.
//(The order is important, Form then JavaScript)
return strForm.ToString() + strScript.ToString();
}
在我的Controller页面中,我使用必需参数调用PreparePostForm
,我收到了POST请求格式。
[HttpPost]
public ActionResult OrderSummary()
{
string request=PreparePOSTForm("payment URL","hashdata required for payment")
return Redirect(request);
}
但重定向时我的误差低于此值。
错误请求 - 无效网址
HTTP错误400.请求网址无效。
我在这里错过了一些与POST请求一起工作的东西。有人可以帮助我。
提前致谢。
答案 0 :(得分:2)
您无法通过Redirect
方法发布表单。您可以将生成的表单字符串发送到View
,之后通过Javascript
发布表单。
public ActionResult OrderSummary()
{
string request=PreparePOSTForm("payment URL","hashdata required for payment")
return View(model:request);
}
并在OrderSummary
视图中
@model string
@Html.Raw(Model)
<script>
$(function(){
$('form').submit();
})
</script>
答案 1 :(得分:0)
我建议您创建一个Action
,其表单会在参数中收到Model
。然后,只需在重定向到此Action
[HttpPost]
public ActionResult OrderSummary()
{
return RedirectToAction("OrderForm", new { HashData = hashData });
}
[HttpGet]
public ViewResult OrderForm(string hashData)
{
OrderFormModel model = new OrderFormModel();
model.HashData = hashData;
return View(model);
}
[HttpPost]
public ActionResult OrderForm(OrderFormModel model)
{
if(ModelState.IsValid)
{
// do processing
}
}
答案 2 :(得分:0)
您可以使用JavaScript。
创建一个包含html表单的页面并通过javascript提交并将您的信息作为输入:隐藏在表单中。
这会将数据提交到您想要的其他地方。在html中执行此操作可以为您提供更多控制权,并且您无需为应用中的每个重定向编写其他答案中显示的操作。