2010-09-28 50 views
4

我有一個需要使用JSON對象集合填充的列表。這裏是我的行動正在恢復:使用JSON從Jquery更新下拉列表

public ActionResult GetProductCategories() 
     { 
      var categories = _entities.ProductCategories.ToList(); 

      var result = new List<SelectListItem>(); 

      foreach (var category in categories) 
      { 
       result.Add(new SelectListItem {Text = category.CategoryName, Value = category.CategoryId.ToString()}); 
      } 

      return Json(result, JsonRequestBehavior.AllowGet); 
     } 

這是我想出了我的JavaScript,從各種渠道收集:

function loadCategories() { 
      $.getJSON("/Admin/Product/GetProductCategories", null, function (data) { 
       var selectList = $("#subCategories"); 

       $.each(data, function(index, optionData) 
       { 
        var option = new Option(optionData.Text, optionData.Value); 
        selectList.add(option, null); 
       });     
      }); 
     } 

但它似乎沒有奏效,並沒有給出任何錯誤。這種事最好的做法是什麼?

+0

什麼從服務器看起來像你的反應如何? – 2010-09-28 01:59:46

回答

6

我想知道什麼是你想在代碼的下一行來實現的,

var option = new Option(optionData.Text, optionData.Value); 
selectList.add(option, null); 

,你想創建一個option然後將其添加在select?如果是這樣,像這樣做,使用.append()

selectList.append(option); 

與,我還是假設new Option(optionData.Text, optionData.Value);正在創造一個新的option,在jQuery的它會是這樣var option = $('<option>').text(optionData.Text).val(optionData.Value);


添加筆記.add()

var selectList = $("#subCategories"); // creates jQuery object selectList. 
selectList.add(option, null); // selectList is jQuery object, 
           // so when you call .add(), you're calling jQuery's `add()`. 

一種變通方法是這樣的,

selectList[0].add(option, null); // you can use [0] to convert it into DOM object. 

之間的區別:

+1

+1 - .add()'當然是一個問題,很好的...我一直看到'.options.add()',但這不是他在這裏調用的。 – 2010-09-28 02:08:53

+0

Woot!這工作。感謝大家! – Gallen 2010-09-28 02:21:18

1

如果JQuery不喜歡從服務器返回的JSON數據,它將自動失敗。將您的瀏覽器指向/ Admin/Product/GetProductCategories並查看結果。確保它沒有任何html標記,並確保鍵名周圍有雙引號。

+0

是的,返回的數據是有效的 - 這似乎是我如何添加到selectList。 – Gallen 2010-09-28 02:17:45

相關問題