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

次のようなことを試すことができます(jqueryを使用):

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

POST から POST にリダイレクトするのはかなり難しく (ユニバーサル サポートのない HTTP ステータス コードに依存します)、GET からは不可能です。

最も簡単な解決策は、(新しい) フォームを投稿する結果に小さな JavaScript を追加することです。

したがって、アクション メソッドは、JavaScript を含む必要なデータ (コントローラーからモデルを介して渡される) を含むビューを返します。

于 2012-07-26T14:27:40.690 に答える