1

私は次のコードを持っていますが、送信ボタンをクリックすると、その名前と値がサーバーに送信されません

@using(Ajax.BeginForm(new AjaxOptions{Url = "http://localhost/controller/action"}))
{
    <button name="action" type="submit" value="Save">
        <span>Save</span>
        <!-- More HTML tags here -->
    </button>
}

ファイルを調べて、jquery.unobtrusive-ajax.jsクリックされたボタンの名前/値を送信する必要があるかどうかを確認し、これらの値を属性としてフォームに付加するこのコードを見つけました。このコードは、後でPOSTリクエストで渡されます。

$("form[data-ajax=true] :submit").live("click", function (evt) {
    var name = evt.target.name,
        form = $(evt.target).parents("form")[0];

    $(form).data(data_click, name ? [{ name: name, value: evt.target.value }] : []);

    setTimeout(function () {
        $(form).removeData(data_click);
    }, 0);
});

の値evt.target.nameevt.target.valueには、クリックを登録したボタンタグ内のHTML要素の名前/値が含まれていました。

evt.target上記のコードで置き換えることでうまくいくようになりましたevt.currentTargetが、これが意図しない副作用をもたらす可能性があるのではないかと少し心配しています。

送信ボタンの名前/値をサーバーに送信するためのより良い方法はありますか?

4

1 に答える 1

1

私はあなたが説明した問題を再現しました、そしてあなたの提案されたコード修正は私のためにトリックをするようです。

jquery.unobtrusive-ajax.js新しいバージョンがリリースされたときに変更をマージすることを忘れないようにする必要があるため、標準ライブラリを変更することに抵抗があることは理解できます。より良いオプションは、パッチを送信して、修正を確認し、できれば標準ライブラリに組み込むことができるようにすることです。これを実行する最善の方法はわかりませんが、ASP.NETコードの大部分がMVCを含むオープンソースになり、Microsoftがコミュニティからのコードの貢献を受け入れ始めたと思います。詳細については、 http://aspnetwebstack.codeplex.com/を参照することをお勧めします。

ライブラリを変更する代わりに、ボタン内に子要素を含める必要をなくすことを検討しましたか?ボタンにテキストのみが含まれている(タグが含まれていない)場合、標準ライブラリは正しく機能し、ボタンの名前と値を投稿します。画像が必要な場合は、ネストされたimgタグの代わりにCSSbackground-imageプロパティを使用することで解決できる場合があります。

于 2012-07-31T13:05:06.447 に答える