Показаны сообщения с ярлыком ajax. Показать все сообщения
Показаны сообщения с ярлыком ajax. Показать все сообщения

03 ноября 2008

ASP.NET MVC + jQuery = рай для AJAX

Я никогда раньше не имел дело ни с одним AJAX Toolkit от Microsoft, но недавно у меня появилась необходимость добавить картографический функционал к проекту, который я веду. Нам нужно было, чтобы у пользователей появилась возможность перемещать маркер по карте, а у нас получать его новые координаты на сервере. Очевидно, что нам для этого придется использовать AJAX в каком-либо виде. Сегодня я вам покажу насколько просто использовать связку ASP.NET MVC на сервере и jQuery на клиенте. Так как jQuery теперь включен в поставку ASP.NET MVC, то больше нет оправдания его не использовать.

Возьмем очень простой пример. У нас есть страница на которой я хочу выводить список людей, когда я нажимаю кнопку "Get people" и добавлять нового человека в базу данных, вводя его имя и нажимая "Add person". Вот как это выглядит:

Для начала создадим кнопку "Get people" и список, в который будем загружать людей:

   1:  <input type="button" id="getPeople" value="Get People" />
   2:  <ul id="people_list">

Далее напишем обработчик события "страница загружена", который устанавливает обработчик клика по кнопке.

   1:  $(function() {
   2:      $("#getPeople").click(function() {
   3:          $.getJSON("/Home/People", null, getPeople);
   4:      });
   5:  });

Когда кнопка нажата мы инициализирум запрос JSON данных с пути /Home/People, который мапится на метод People контроллера Home.

   1:  [AcceptVerbs(HttpVerbs.Get)]
   2:  public ActionResult People()
   3:  {
   4:      var db = new DataClasses1DataContext();
   5:      return Json(db.Persons);
   6:  }

Все, что мы тут делаем - это получаем список людей из базы данных(с помощью LINQ to SQL) и возвращаем их в виде JSON. Когда ответ получен браузером вызывается функция getPeople, как у мы указали это в методе getJSON. Вот код функции getPeople:

   1:  function getPeople(people) {
   2:      $("#people_list").text("");
   3:      $.each(people, function(i) {
   4:          $("#people_list").append("<li>" + this.Name + "</li>");
   5:      });
   6:  }

Данные, полученые от сервера приходят в нее в виде параметра people. Все что нам нужно сделать - это итереровать через коллекцию и для каждого ее элемента добавлять тег <li> в наш список людей. Как видите, взаимодействие ASP.NET MVC и jQuery реализуется очень просто - никакой ручной конвертации данных из объектов C# в объекты JavaScript делать не пришлось.

А что насчет обновления данных? Не менее просто. Для начала нам понадобится немного HTML кода: поле ввода и кнопка.

   1:  <label>Name <input type="text" id="name" /></label><br />
   2:  <input type="button" id="addPerson" value="Add Person" />

И еще один обработчик нажатия кнопки.

   1:  $("#addPerson").click(function() {
   2:      var name = $("#name")[0].value;
   3:      if (name == "") {
   4:          alert("You must provide a name");
   5:          return;
   6:      }
   7:      var person = { Name: name };
   8:      $.post("/Home/People", person, null, "json");
   9:  });

На этот раз мы использовали полезную функцию post, чтобы отправить наш свежесозданный объект JSON по адресу /Home/People методом POST. Так как используется метод POST, то этот запрос будет пойман нашим перегруженым методом People с атрибутом AcceptVerbs[HttpVerbs.Post].

   1:  [AcceptVerbs(HttpVerbs.Post)]
   2:  public ActionResult People(string Name)
   3:  {
   4:      var db = new DataClasses1DataContext();
   5:      var person = new Person {Name = Name};
   6:      db.Persons.InsertOnSubmit(person);
   7:      db.SubmitChanges();
   8:      return null;
   9:  }

Все что нам приходится сделать на сервере, чтобы получить данные из запроса это назвать параметр этого метода также, как и поле нашего JSON объекта, то есть Name. ASP.NET MVC автоматически найдет соответсвие и отдаст нам нужные данные. Если вам нужно использовать сложный JSON объект, то вы можете десериализовать его, используя встроеный databinding. Осталось только создать объект для базы данных и сохранить его.

Я поздно занялся Ajax, но со связкой ASP.NET MVC + jQuery добавление такого функционала так же легко и приятно, как дуновение свежего ветра.

Демо-Solution вы можете скачать здесь: http://static.mikehadlow.com/JQueryAjax.zip

Перевод статьи MVC Framework and jQuery = Ajax heaven

15 января 2007

Добро!

Ну что ж начнем. Первый пост комом, как говорится, но все же. Как видно из названия блога - посвящен он будет веб-программированию, а именно ASP.NET 2.0 и все, что с ним связано - Sql Server 2005, AJAX, SEO and more. Так же, если меня сильно заденут, здесь будут пробегать общие новости, вроде выхода iPhone(смайл). Этот блог - моя первая попытка создать нечто не лытдыбровское, а посвященное чему-то доброму, вечному и полезному, так что особо не пинайте. На этом вступление считаю оконченным. Буду рад, если этот блог будет кому-либо полезным.