3

假设我有以下经典asp的形式:

<form name="impdata" id="impdata" method="POST" action="http://www.bob.com/dologin.asp">
<input type="hidden" value="" id="txtName" name="txtName" />
</form>

我需要在asp.net mvc3中模拟提交表单的动作,但是我需要在提交前修改隐藏值。是否可以通过动作或其他方式做到这一点?

我目前所拥有的...

看法:

@using (Html.BeginForm("Impersonate", "Index", FormMethod.Post, new { id = "impersonateForm" }))
{                       
    <input id="Impersonate" class="button" type="submit" value="Impersonate" action />
    <input type="hidden" value="" id="txtName" name="txtName" />
}

控制器:

[HttpPost]
public ActionResult Impersonate(string txtName)
{
txtName = txtName + "this string needs to be modified and then submitted as a hidden field";  
//Redirect won't work needs the hidden field
//return Redirect("http://www.bob.com/dologin.asp");
}

解决方案:

似乎从控制器中做到这一点并不容易,所以我最终使用了 jQuery。该操作返回一个 JsonResult。就像是:

<button id="Impersonate" class="button" onclick="Impersonate()">Impersonate!</button>

<form name="impdata" id="impersonateForm" action="http://www.bob.com/dologin.asp">
  <input type="hidden" value="" id="txtName" name="txtName" /> 
</form>

function Impersonate() {           
    $.ajax({
        type: 'POST',
        asynch: false,
        url: '@Url.Action("Impersonate", "Index")',
        data:
            {
                name: $('#txtName').val()                    
            },
        success: function (data) {                
            $('#txtName').val(data.Name);              
            $('#impersonateForm').submit();               
        }
    });

似乎运作良好...

4

2 回答 2

1

从 POST 重定向到 POST 是相当困难的(依赖于没有通用支持的 HTTP 状态代码),并且从 GET 中重定向是不可能的。

最简单的解决方案可能是在发布(新)表单的结果上添加一点 JavaScript。

因此,您的操作方法返回一个视图,其中包含必要的数据(通过模型从控制器传递),其中将包括 JavaScript。

于 2012-07-26T14:27:40.690 回答
1

您可以尝试这样的事情(使用 jquery):

<input id="Impersonate" class="button" type="submit" value="Impersonate"    onclick="$('#txtName').val('new value')" />
于 2012-07-26T17:03:11.863 回答