ASP.NET MVC 2.0 Как передать данные из контроллера в Jquery - PullRequest
1 голос
/ 23 сентября 2010

Я пытаюсь передать данные из моего контроллера и поместить их в переменную в сценарии JS. Я делал это раньше, и это сработало отлично, вот почему этот озадачивает меня еще больше.

Вот мой код контроллера:

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 я также получаю сообщение об ошибке «Uncaught SyntaxError: Неожиданный токен ILLEGAL». Есть идеи, что не так в этом коде? Я почти уверен, что это то же самое, что я использую для моего другого проекта, и этот работает просто великолепно, поэтому я действительно не знаю, что не так. Любая помощь будет высоко ценится.

С наилучшими пожеланиями Bhaal275

Ответы [ 3 ]

2 голосов
/ 24 сентября 2010

Вам необходимо отобразить строку javascript, которую можно проанализировать с помощью JSON.parse (). Для этого используйте 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) %>');

Не используйте другое действие контроллера (как предложено Скоттом Андерсоном), потому что для этого требуется еще один прием на сервер.

0 голосов
/ 23 сентября 2010

Из того, что я понял, вы пытаетесь вернуть объект JSON из вашего действия.Если это так, на самом деле вам вообще не нужно его просматривать.Пока ваш SklepOnline.Category объект сериализуем, вы можете возвращать Json-представление этого объекта с помощью действия, подобного этому:

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

Теперь, чтобы использовать этот объект, вы можете получить его с помощью простого AJAXЗвоните с вашего JavaScript в любом представлении.В этом примере используется jQuery:

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

Это избавляет вас от необходимости писать представление вообще, и данные будут загружаться через AJAX в фоновом режиме.Удачи.

0 голосов
/ 23 сентября 2010

Вам необходимо вернуть JsonResult с помощью метода Json в контроллере.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...