2013-03-13 89 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中創建和填充下拉列表(或