2010-09-23 160 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) %>'); 

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

相关问题