ASP.NET MVC 3 - Можем ли мы использовать привязку модели к вызовам jQuery AJAX? - PullRequest
9 голосов
/ 21 января 2011

Если у меня есть следующая функция jQuery (во внешнем файле):

function getResults(field1, field2, field3) {
   $.get('/Search/GetResults', { id: field1, type: field2, blah: field3 }, function(data) {
      $('#target').html(data);
   });
}

Который, по сути, берет из формы несколько полей, отправляет их в метод действия (который возвращает PartialViewResult) и связывает результат с целевым div.

Вот этот метод действия:

[HttpGet]
public PartialViewResult GetResults(int id, int type, string blah)
{
   var model = repository.GetResults(id, type, blah);
   return PartialView("Results", model);
}

Можно ли использовать привязку модели здесь? Например, мы можем сделать это:

function getResults(someModel) {
   $.get('/Search/GetResults', { model: someModel }, function(data) {
      $('#target').html(data);
   });
}

А это:

[HttpGet]
public PartialViewResult GetResults(SearchPreferences prefs)
{
   var model = repository.GetResults(prefs);
   return PartialView("Results", model);
}

Или я должен создать объект JSON и передать его? В настоящее время эти значения извлекаются через отдельные вызовы JQuery DOM:

var field1 = $('#field1').val();
var field2 = $('#field2').val();

Цель - сократить / упростить код jQuery. У меня есть все эти вызовы, чтобы получить все значения, а затем мне нужно передать их все в качестве параметров.

В идеале я хотел бы просто передать один объект.

Есть рекомендации?

РЕДАКТИРОВАТЬ : только что понял, что я могу использовать новую функцию JSON Model Binding в ASP.NET MVC 3. Читайте об этом сейчас ... (не стесняйтесь ответь заранее тем временем).

Ответы [ 2 ]

4 голосов
/ 21 января 2011

В ASP.NET MVC 3 ДА! Проверьте эту ссылку , от самого TheGu.

ASP.NET MVC 3 теперь включает в себя встроенный поддержка публикации на основе JSON параметры со стороны клиента JavaScript для методов действий на сервер. Это облегчает обмениваться данными через клиента и сервер и построить богатый JavaScript передние концы.

1 голос
/ 21 января 2011

Если вы создаете класс, содержащий свойства, которые вы отправляете, связыватель модели по умолчанию включается и связывает данные с этим классом.В вашем примере создайте класс:

public class SearchPreferences 
{
  public int id { get; set; }

  public int type { get; set; }

  public string blah { get; set; }
}

Тогда в вашем действии это может быть:

[HttpGet]
public PartialViewResult GetResults(SearchPreferences prefs)
{
   var model = repository.GetResults(prefs);
   return PartialView("Results", model);
}

Они имеют ключ к тому, чтобы имена в ваших данных $ .get соответствовали именам.в вашем классе SerachPreferences.

...