0

.NetプラットフォームでMVC4を使用しており、次のhtmlが表示されています。ご覧のとおり、適切なアクションを実行するためにコントローラーに入るときに押されたボタンを区別するために、名前は同じです。

<tr>
    <td>
        <input type="submit" name="submitbutton" id="btnRefresh" value='Refresh' />
    </td>
        @if (Model.ShowGeneratePDFBtn == true)
        {
            <td>
                <input type="submit" name="submitbutton" id="btnGeneratePDF" value='Generate PDF' />
            </td>
        }
</tr>

ただし、2番目の(「PDFの生成」)ボタンが押された場合、プロセスの実行中にユーザーが再度押すことができないように、このボタンを無効にする必要があります。無効にすると、HTMLにコントロールとして表示されなくなります(これは理解できます)。

これがjsです:

$('#btnGeneratePDF').click(function () {
    DisableGeneratePDF();
});

function DisableGeneratePDF() {
    $('#btnGeneratePDF').attr("disabled", true);
}

コントローラでは、押されたときのボタンの値が「PDFを生成」ではなくnullであるため、適切なアクションが実行されません。

コントローラの最初の行は次のとおりです。

[HttpPost]
public ActionResult ProcessForm(string submitbutton, ViewModelTemplate_Guarantors model, FormCollection collection)

これがビューの最初の行です。FormMethod.Postでも試してみましたが、別のページに移動しないため、AjaxOptionの方が効率的です。

@using (Html.BeginForm("ProcessForm", "Home", new AjaxOptions { HttpMethod = "POST" }))

ボタンを無効にしたときに「PDFの生成」値をコントローラーに正常に渡すにはどうすればよいですか?

4

1 に答える 1

1

非表示のフォーム値を作成し、これをビューモデルに配置します。次に、クリックイベントハンドラーでその値を設定します。

モデルに次を追加します

public class Guarantors
{
    public bool ShouldGeneratePdf { get; set; }
}

あなたの見解に、

@Html.HiddenFor(x => x.ShouldGeneratePdf)

JavaScriptに

$('#btnGeneratePDF').click(function () {
    DisableGeneratePDF();
    $('#ShouldGeneratePdf').val('True');
});

function DisableGeneratePDF() {        
    $('#btnGeneratePDF').attr("disabled", true);
}

それはそれをするべきです。

于 2012-11-07T16:19:42.143 に答える