Визуализация частичного просмотра с использованием Jquery Ajax с переменными данными - PullRequest
9 голосов
/ 15 июня 2011

Я уже прочитал этот пост , но я не уверен, чтобы заставить его работать, принимая данные от пользователя. Вот jjery ajax, который я использую. Я знаю (или, по крайней мере, думаю), что это не может сделать частичное. Но это работает до тех пор, пока не прекратится рендеринг. Я думал, что это может быть полезно иметь.

 $.ajax(
     {
         type: 'POST',
         contentType: 'application/json; charset=utf-8',
         data: "{'test':" + "'" + dateText + "'}",
         dataType: 'json',
         url: 'Site/Grab/',
         success: function (result) {
         alert('Success');
         },

         error: function (error) {
            alert('Fail');
         }
      });

Вот мой контроллер

[HttpPost]
    public ActionResult Grab(string test)
    {
        DateTime lineDate= Convert.ToDateTime(test);
        List<Info> myInfo= GameCache.Data(lineDate);
       return PartialView("_PartialView", myInfo);
    }

Ответы [ 2 ]

18 голосов
/ 15 июня 2011

Хорошо, пару вещей, чтобы попробовать:

1) dataType - ожидаемый результат вызова ajax. В вашем случае вы отправляете JSON, но получаете HTML. Параметр content-type указывает запрос, который у вас есть (и то, что у вас правильно). Таким образом, тип данных должен быть:

dataType: 'html',

2) Вам нужно сериализовать JSON. Попробуйте захватить легковесную библиотеку JSON и stringify 'ing:

var test = { test: 'testvalue' };
$.ajax {
   ...
   data: JSON.stringify(test),
   ...
});

Гораздо проще, чем пытаться привести строку JSON к кавычкам. Создайте обычную переменную JS, а затем зафиксируйте ее.

Остальная часть вашего кода выглядит нормально.

Если это проблема с HTML / разметкой самого частичного представления, запустите в режиме отладки, и Visual Studio должен остановиться на строке в разметке, которая вызывает проблему.

Дополнительная подсказка : ASP.NET MVC 3 включает встроенную привязку модели JSON. Таким образом, вы можете создать базовое POCO, соответствующее полям вашего объекта JSON, а затем принять его как строго типизированный объект в методе действия:

[HttpPost]
public ActionResult Grab(MyJsonObject obj) 
{
   DateTime lineDate= Convert.ToDateTime(obj.test);
   List<Info> myInfo= GameCache.Data(lineDate);
   return PartialView("_PartialView", myInfo);
}

Поскольку вы отправляете только один параметр, это излишне - но если у вас больше 2, то стоит использовать JSON POCO.

3 голосов
/ 05 января 2012

Измените код вашего контроллера на:

public ActionResult Grab(string test) {
  DateTime lineDate= Convert.ToDateTime(test);
  List<Info> myInfo= GameCache.Data(lineDate);

  return Json(new { data = this.RenderPartialViewToString("_PartialView", myInfo) });
}
...