【问题标题】:How could i Recognize which dropdown in view is changed?我如何识别视图中的哪个下拉列表已更改?
【发布时间】:2020-02-05 17:09:19
【问题描述】:

我的 razor 视图中有四个下拉列表,然后它们都有 onchange() 方法,并且我从表单中调用提交方法,但我想在控制器中识别这四个下拉用户中的哪一个实际上已更改. 在视图中:

@Html.DropDownList("drpOriginalStation", (IEnumerable<SelectListItem>)ViewBag.originalStationsList, new { @class = "dropdown-stations", @id = "drpOriginalStation", onChange = "onSelectedIndexChanged()" })

和另一个这样的下拉菜单,然后我有 javascript:

        function onSelectedIndexChanged(val) {
        document.getElementById('search').submit(val);
    }

最后在控制器中我需要识别更改了哪个下拉菜单?

【问题讨论】:

    标签: javascript razor asp.net-core-mvc


    【解决方案1】:

    您可以这样做的一种方法是在表单中添加一个隐藏元素:

    <input type="hidden" id="changedDropdown" name="changedDropdown" value="NONE">
    

    然后在你的 onSelectedIndexChanged 中你可以这样做:

    function onSelectedIndexChanged(e) {
      document.getElementById('changedDropdown').value = e.target.id; // changedDropdown now equals "drpOriginalStation"
      document.getElementById('search').submit();
    }
    

    尝试修改您的控件定义以将其传入:

    @Html.DropDownList("drpOriginalStation", (IEnumerable<SelectListItem>)ViewBag.originalStationsList, new { @class = "dropdown-stations", @id = "drpOriginalStation", onChange = "onSelectedIndexChanged(this)" })
    

    【讨论】:

    • 不起作用,因为它无法识别脚本代码中的参数“e”。
    • 更新了我的答案
    • 它不起作用!选择更改下拉菜单后,我没有回发。
    • 啊哈,谢谢杰克!我将e参数参数更改为selectObject,现在可以工作了,我会为其他人写答案。
    【解决方案2】:

    作为 Jack 响应的答案,只需更改此脚本代码,如下所示,然后它就可以工作了。

        function onSelectedIndexChanged(selectObject )
        {
             document.getElementById('changedDropdown').value = selectObject.id;
             document.getElementById('search').submit();
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-04-04
      • 2011-02-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多