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');