如何从动作中提交带有隐藏字段的表单?

时间:2012-07-26 14:19:43

标签: c# asp.net asp.net-mvc-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();               
        }
    });

似乎运作良好......

2 个答案:

答案 0 :(得分:1)

很难从POST重定向到POST(依赖于没有通用支持的HTTP状态代码),并且GET无法实现。

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

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

答案 1 :(得分:1)

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

<input id="Impersonate" class="button" type="submit" value="Impersonate"    onclick="$('#txtName').val('new value')" />