没有打开新页面的MVC呼叫控制器方法?

时间:2013-03-13 18:14:38

标签: javascript jquery asp.net-mvc

我的控制器类中有一个名为output的方法。我想在我的下拉列表中更改所选项时向其发送参数,然后根据该参数使其运行某个SQL查询,并让它返回结果。问题是,我不想在返回结果时打开新页面,我只想在警报中显示该查询的结果,而不是打开运行该方法的URL。这是我当前的javascript,该方法是一个名为output的ActionResult,并且有一个名为test的参数,它是一个字符串。

    <script src="../../Content/jquery.js"></script>
<script type="text/javascript">
    jQuery(function () {

        jQuery("#SelectedCentre").change(function () {
            var _this = jQuery(this);
            var selectedCentre = _this.val();
            window.location.href = "/Centres/output?test=" + selectedCentre;
        });
    });
</script>

3 个答案:

答案 0 :(得分:3)

你应该为此做一个ajax调用:

jQuery(function(){

    jQuery("#SelectedCentre").change(function () {
        var _this = jQuery(this);
        var selectedCentre = _this.val();
        jQuery.get("/Centres/output?test=" + selectedCentre, function(results){
         // do something with results here
        });
    });
});

编辑在评论中回答您的问题:

在你的控制器中返回一个json类型的对象,如下所示:

 var data = new List<SelectListItem>
                           {
                               new SelectListItem
                                   {
                                       Text = "Test1",
                                       Value = "1"
                                   },
                                new SelectListItem
                                   {
                                       Text = "Test2",
                                       Value = "2"
                                   }
                           };
            return Json(data, JsonRequestBehavior.AllowGet);

更新你的jQuery代码来处理json对象并创建选项:

$.getJSON("/Centres/output?test=" + selectedCentre, function (results) {
    $.each(results, function (i, item) {
        $("<option>", { text: item.Text, value: item.Value }).appendTo("#mySelect");
    });
});

答案 1 :(得分:2)

你想使用JQuery的get方法。

 jQuery.get('Centres/output?test=' + selectedCentre, function (result) {
     alert(result);
 });

只要是JSON,您就可以对所需的结果执行任何操作。如果是HTML,则可以将其推送到页面上的现有元素中。

为什么你不使用jquery给你的$?

答案 2 :(得分:0)

jQuery.get("/Centres/output?test=" + selectedCentre, function(results){
         // do something with results here
console.log(results);
        });