2010-09-23 162 views
1

Iam嘗試從我的控制器傳遞數據,並將它放入JS腳本中的變量中。我之前完成了它,它的工作完美,這就是爲什麼這個更讓我困惑。ASP.NET MVC 2.0如何將數據從控制器傳遞給Jquery

這裏是我的控制器代碼:

public ActionResult GetCategories() 
     { 
      var categories = categoryRepository.ListActiveCategories().ToList(); 
      return View(categories); 
     } 

而且這是在視圖中我的JS代碼:

<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1-vsdoc.js"></script> 

<script type="text/javascript"> 
    var categories = JSON.parse('<%= Model %>'); 

</script> 

這是輸出我得到我的瀏覽器的網站:

<script type="text/javascript" src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.1-vsdoc.js"></script> 



<script type="text/javascript"> 

    var categories = JSON.parse('System.Collections.Generic.List`1[SklepOnline.Category]'); 







</script> 

在Chrome中我也得到一個錯誤 「未捕獲的SyntaxError:意外的標記非法」。 任何想法這段代碼有什麼問題?我非常確定這是我用於其他項目的相同方式,並且其中一個很好,所以我真的不知道什麼是錯的。任何幫助將非常感激。

問候 Bhaal275

回答

0

你需要通過JSON方法控制器返回JsonResult。

+0

不是,我不得不將數據解析爲JSON,然後將它們發送到視圖,但是使用了新創建的類。但你的建議指出我正確的方式,謝謝:) – domderen 2010-09-23 19:43:08

0

從我收集的內容中,您試圖從您的操作中返回一個JSON對象。如果是這樣的話,你根本不需要看到它。只要你SklepOnline.Category對象序列化,你可以用這樣一個動作返回該對象的JSON表示:

public JsonResult GetCategories() 
{ 
    var categories = categoryRepository.ListActiveCategories().ToList(); 
    return Json(categories); 
} 

現在,消耗這個對象,你可以從你的JavaScript一個簡單的AJAX調用抓住它在任何視圖中。這個例子使用jQuery:

$.getJSON('MyController/GetCategories', function(categories) { 
    // now I have a JSON object called "categories" with my data 
}); 

這使您不必編寫視圖,數據將通過AJAX在後臺加載。祝你好運。

2

您需要呈現可以由JSON.parse()解析的JavaScript字符串。 使用JavaScriptSerializer做到這一點(這是對的HtmlHelper的一個推廣法):

public static IHtmlString ToJson(this HtmlHelper instance, object data) 
{ 
    var serializer = new JavaScriptSerializer(); 
    return new HtmlString(serializer.Serialize(data)); 
} 

然後在視圖:

var categories = JSON.parse('<%= Html.ToJson(Model) %>'); 

請勿使用其他控制器的動作(如由斯科特·安德森建議)原因需要另外往返服務器。

相關問題