【问题标题】:MVC dropdownlist onchange event not calling properly the action in controllerMVC 下拉列表 onchange 事件未正确调用控制器中的操作
【发布时间】:2013-12-18 09:21:09
【问题描述】:

您好,我在这里需要做的是,当下拉列表的选择发生变化时,我想使用 AJAX 调用一个动作并传递一些数据。您可以在下面找到我正在使用的代码。我进行了很多搜索,但不明白为什么它没有进入操作。数据和网址是正确的。控制器名称为 HomeController,动作名称为 getData。

<script type="text/javascript">
    function submitform() {
        var a = document.getElementById("tournaments");
        var datad = a.options[a.selectedIndex].value;
        var url = '/Home/getData';
        var completeurl = window.location.host + url;

        alert(completeurl);
        $.ajax({
            type: "GET",
            url: completeurl,
            data: {tournamentid : datad},
            datatype: 'JSON',
            success: function (data) { alert('got here with data'); },
            error: function () { alert('something bad happened'); }
        });
        };

</script>

Dropdownlist:
 <%: @Html.DropDownList("tournaments", null, new { name = "tournaments", title = "Please Select Tournament.", onchange = "submitform();",id = "tournaments"}) %>

Action:
[HttpGet]
    public ActionResult getData(int? tournamentid)
    {
        //perform your action here
        UserBl us = new UserBl();
        int num = Convert.ToInt32(tournamentid);
        Tournament tour = us.GetTournamentById(num);
        return Json(tour, JsonRequestBehavior.AllowGet);
    } 

【问题讨论】:

    标签: javascript jquery ajax asp.net-mvc-4 onchange


    【解决方案1】:

    你会这样做:

    $(function(){   // document and jquery ready
           $("#tournaments").on("change", function(e){
                  var dropValue = $(this).val();
    
                   $.ajax({
            type: "GET",
            url: '/Home/getData/' + dropValue,
            datatype: 'JSON',
            success: function (data) { alert('got here with data'); },
            error: function () { alert('something bad happened'); }
        });
            });
     });
    

    【讨论】:

    • 仍然没有响应:/ 我需要用 routes.MapRoute 更改 global.asax 中的某些内容吗?无论如何,非常感谢您的帮助
    • 不太确定,认为您可能需要找出原因?它没有做任何事情,例如在您的控制台中,查看数据传输,查看请求是否发生,错误是什么,是基于路由还是基于 500
    • 控制台在 IE 上是 f12,在 chrome 上是 F12
    • 它给了我“Uncaught ReferenceError: $ is not defined”
    • 现在解决了这个错误,它给了我这个新错误“未捕获的 ReferenceError:intellisense 未定义”
    【解决方案2】:

    有两种方法 一个是(使用 selectedItem 作为锦标赛 ID)

    <script type="text/javascript">
    $(function () {
        $("#tournaments").change(function () {
            var selectedItem = $(this).val();
            submitform(selectedItem);
        });
    });</script>
    

    或者 将 javascript: 用于 onchange 属性

    onchange = "javascript:submitform();"
    

    编辑: 为此我建议

    $.ajax({
    cache: false,
    type: "GET",
    url: url,
    data: { "tournamentid ": datad},
    success: function (data) {
        alert("succeded")
    },
    error: function (xhr, ajaxOptions, thrownError) {
        alert('Failed ');
    }});
    

    【讨论】:

    • 我已经更新了 getData 的建议,现在你可以设置断点并检查它是否被调用
    • 对于$.ajax() 方法,我是把它放在@Scripts{&lt;script&gt; &lt;/script&gt; } 块中(如果我使用视图布局),还是必须从onchange 调用它?跨度>
    猜你喜欢
    • 2012-02-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-09-14
    • 2014-10-12
    相关资源
    最近更新 更多