2013-03-13 52 views
0

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

<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> 
+0

window.location.href是一个JS导航方法 – 2013-03-13 18:21:52

回答

3

你应该让Ajax调用为:

的jQuery(函数(){

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"); 
    }); 
}); 
+0

如果查询的结果存储在一个List 中,是否有一种方法可以在同一个jQuery/javascript中创建和填充下拉列表(或