Хорошо, ребята, вот что я в итоге сделал, и это прекрасно работает.
Для целей этого обсуждения есть 2 просмотра.Членство собирает информацию от пользователя, а Buy выполняет публикацию на стороннем сервере.
Когда пользователь нажимает кнопку «ОК» в представлении «Членство», выполняется первый блок кода ниже - HttpPost в действии «Членство».Здесь информация обрабатывается при необходимости, а затем сохраняется в TempData, чтобы ее можно было передать в представление Buy.Затем он перенаправляет управление в представление Buy.
В действии Buy выполняется второй блок кода ниже.Здесь я могу взять материал, собранный в членстве, и делать все, что мне нужно.Затем скопируйте все данные формы в значения ViewData [].Вы можете использовать модель вместо ViewData, но у меня есть другие вещи в модели.Возможно, их можно было бы объединить, но это работает.
Наконец, в представлении Buy установите все значения полей формы, используя значения ViewData.Однако ключом является использование обработчика jQuery .ready, чтобы форма автоматически отправлялась после завершения загрузки страницы.
Таким образом, это в основном копирует значения формы из представления «Членство» в представление «Купить», добавляет несколько новых значений и затем публикует их все по стороннему URL-адресу.
BuyController.cs
[HttpPost]
public ActionResult Membership(OtherModel model)
{
// do some stuff with the model
// ...
TempData["OtherModel"] = model;
return RedirectToAction("Buy");
}
...
public ActionResult Buy()
{
// do some stuff to generate crypto key
var fingerprint = DoSomeStuff();
ViewData["x_fp_hash"] = fingerprint;
var otherstuff = (OtherModel) TempData["OtherModel"];
ViewData["x_login"] = otherstuff.login;
return View(model);
}
Buy.cshtml
@{
Layout = "~/Views/Shared/_LayoutBlank.cshtml";
ViewBag.Title = "Validating ...";
}
<script type='text/javascript'>
$(function () {
$("form#simForm").submit();
});
</script>
@model My.Namespace.MyModel
<form id="simForm" runat="server" method='post' action='https://xxxxxx.net/url/transact.dll'>
<input type='hidden' runat="server" name='x_login' id='x_login' value="@ViewData["x_login"]" />
<input type='hidden' runat="server" name='x_fp_hash' id='x_fp_hash'value="@ViewData["x_fp_hash"]"/>
etc.
</form>