-1

onchange()カスケード ドロップダウン リストがあり、すべてのイベントでフォーム データをコントローラーに送信する必要があります。onchange()そのため、ドロップダウン リストのイベントで2 つの異なる操作を行う必要があります。

1)これは、ドロップダウンリストのすべての onchange() イベントでコントローラーにデータを送信します:(これは私の最初のドロップダウンリストです)

@Html.DropDownListFor(model => model.CategoryId, ViewBag.CategoryList as IEnumerable<SelectListItem>, "-",
 new { id = "CategoryDDL", onchange = "$('#MyForm').trigger('submit');" })

2)これは、カスケード ドロップダウンリスト用です。

<script type="text/javascript">
    $(function () {
        $("#CategoryDDL").change(
        function () {
            loadLevelTwo(this);
        });
        loadLevelTwo($("#CategoryDDL"));
    });


function loadLevelTwo(selectList) {
       // my some code...
    }
</script>

この場合、 CategoryDDL ドロップダウン リストを変更すると、2 つの操作が混在します。2つの操作を一緒にしようとします。

私はそれらを交互にしたい。最初にカスケード操作が機能し、次にデータ送信操作が機能します。これどうやってするの?

編集:

機能がなければloadLevelTwo()、すべてがうまく機能します。ドロップダウンリストを変更すると、リクエストがコントローラに送られ、製品がフィルタリングされます。次にloadLevelTwo()、カスケード ドロップダウン リストを追加しました。2つのドロップダウンリストがあるためです。最初のドロップダウンリストを変更すると、2番目のドロップダウンリストが自動的に更新されます。私のスクリプトはこれを行います。ただし、これらのイベントは一緒に機能します。コントローラーには、カスケード ドロップダウンをフィルター処理するためのアクションがあります。

public ActionResult FilterProducts(CriteriaModel model) {}

public ActionResult GetSubCategoryByCategoryId(int id) {}

これらのメソッドは同時に機能します。1 つの行は、任意のアクションで機能し、その後、他のアクションに入ります。その後、最初のアクションに戻ります。したがって、アクションがビューに戻る間、囲まれます。関数の後にフォームを送信しloadLevelTwo()ますが、問題は解決しません:

    loadLevelTwo($("#CategoryDDL"));
    $('#MyForm').trigger('submit');
4

2 に答える 2

1

サーバー側で onchange を取り除き、クライアント側ですべてを行います。

$(function () {
        $("#CategoryDDL").change(
        function () {
            loadLevelTwo(this);
        });
        loadLevelTwo($("#CategoryDDL"));
        $('#MyForm').trigger('submit');
    });
于 2013-02-09T15:46:13.633 に答える
0

あなたが何を求めているのかはまだ明らかではありません。単純にフォームを送信して を呼び出したい場合loadLevelTwoは、スクリプト内の単一のバインディングを使用してそれを行うことができます (およびonchangeかみそりから を削除します)。

$(function () {
    $("#CategoryDDL").on('change', function() {
        loadLevelTwo(this); // load the next level

        $("#MyForm").submit(); // submit the form
    });
});

これにより、両方のタスクが連続して完了します。

于 2013-02-09T17:00:46.373 に答える