3

この質問では、送信ボタンを無効にして複数のポストバックを防ぐことは、(悪意のない) ユーザーが複数回ポストバックするのを止める実行可能な解決策でした。

ビューに複数の送信ボタンがある場合、このオプションはうまく機能しません。次の例を見てください。

//意見:

@using (Html.BeginForm("Catalog", "Images", FormMethod.Post, new { onsubmit = "Utility.disable_buttons(this.id);", id = "catalog_form" }))
{
<p>
    <input type="submit" name="btnSubmit" value="Clear" /> |
    <input type="submit" name="btnSubmit" value="Catalog" /> |
    <input type="submit" name="btnSubmit" value="Update" /> |
    @Html.ActionLink("Back to List", "Index")
</p>
}

//コントローラ:

[HttpPost]
    public ActionResult Catalog(string btnSubmit)
    {
        switch (btnSubmit)
        {
            case "Catalog":
                //More differenter code
                break;
            case "Clear":
                //Different code
                break;
            case "Nothing":
                //Code
                break;
        }
        return View();
    }

ビューには、3 つの異なる送信アクションがあります。ボタンが無効になっている場合、それらの値は渡されず、コントローラーは送信をトリガーしたボタンを認識できません。(コントローラーは常に null になります。) 残念ながら、submitdisabledcontrols 属性は MVC でこの問題を解決していないようです。無効なコントロールの値をサーバーに渡す方法を知っている人はいますか?

4

2 に答える 2

2

背景情報:

すべてのボタンを無効にしてクリックできないようにしたいが、ユーザーがクリックしたものを知りたい場合、私が考えることができる唯一の解決策は、このコードと一緒に非表示のフィールドです:

$(function() {
    $('input[type=submit]').click(function() {
        var form = $(this).closest('form');
        form.find('#hiddenField').val($(this).val());
        form.find('input[type=submit]').prop('disabled', true);
    });
});

ユーザーがいずれかのボタンをクリックした後に他のボタンをクリックできないようにする場合は、次のようにします。

$(function() {
    $('input[type=submit]').click(function(event) {
        $(this).closest('form').find('input[type=submit]').not(this).prop('disabled', true);
    });
});

残念ながら、ハンドラーをフォームの送信にバインドし、どの入力がクリックされたかを判断する解決策 (私が知っている) はありません。これは質問に関連する問題ではありませんが、上記のコードが少し複雑になります。

于 2012-01-07T14:23:52.543 に答える
0

あなたはこれを試すことができます

if (coll.AllKeys.Contains("Clear"))
{
  // your code here for this submit
}
于 2011-08-29T08:39:18.527 に答える