-1

我有级联下拉列表,我应该在每个onchange()事件中将表单数据发送到控制器。这就是为什么我应该对onchange()下拉列表事件进行 2 种不同的操作。

1)这会在 dropdowlists 的每个 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 个下拉列表。我想当我更改第一个下拉列表时,第二个下拉列表会自动更新。我的脚本就是这样做的。但是,这些事件混合在一起。在控制器中,我有过滤级联下拉列表的操作:

public ActionResult FilterProducts(CriteriaModel model) {}

public ActionResult GetSubCategoryByCategoryId(int id) {}

这些方法同时起作用。一条线在任何行动中起作用,然后进入其他行动。然后返回第一个动作,因此,当动作返回视图时,它被包围。我在函数之后发送表单loadLevelTwo(),但它不能解决问题:

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

2 回答 2

1

我会摆脱服务器端的 onchange 并在 clienside 上做所有事情:

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

目前还不清楚你要求做什么。如果您只是想提交表单并调用loadLevelTwo,您可以通过脚本中的单个绑定来实现(并onchange从 razor 中删除):

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

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

这将连续完成这两项任务。

于 2013-02-09T17:00:46.373 回答