Как использовать Ajax в MVC 3? - PullRequest
0 голосов
/ 20 апреля 2011

У меня есть форма, которую я хотел бы отправить через Ajax.Эта форма хранится в частичном представлении, поэтому весь частичный вид представляет одну форму.

Я генерирую десять из этих форм с циклом foreach:

 @foreach (Product p in Model.Products)
 {                     
    @Html.Partial("_EditProduct", p)                    
 }

Это прекрасно работает.

В частичном представлении _EditProduct у меня есть:

@using (Ajax.BeginForm("Update", "Product", new AjaxOptions { UpdateTargetId = "updateStatus" })) {
     <span id="updateStatus">Update will go here</span> }

     // Product fields

        <div>                
             <input type="submit" value="Update" class="btn"/>
        </div>
    }

Нажатие на кнопку отправки отправляет сообщения на контроллер:

[HttpPost]
public JsonResult Update(int id, FormCollection collection)
{
   ProductService pService = new ProductService();
   Product p =pService.Find(id);

   UpdateModel(p);
   return Json(p);            
}

Это обновляет продукт, но возвращает сбой из-за ошибки сериализации.

Основная проблема заключается в том, что мне трудно найтихороший ресурс по MVC 3, особенно по части Ajax.Учебники и блоги, кажется, делают все по-другому.В идеале я хотел бы использовать как можно больше функций .NET и MVC 3, а не писать множество jQuery / JavaScript.

Спасибо

Редактировать: Просто добавлю, я бы хотел держаться подальше от MS Ajax Control Toolkit

Ответы [ 3 ]

2 голосов
/ 20 апреля 2011

об ошибке сериализации ... iirc выдаст, если у вас есть свойства с отложенной загрузкой в ​​Product и соединение с БД закрыто. Вы можете сделать как вернуть Json (новый {product.a, product.b, product.c}) и т. Д.

2 голосов
/ 20 апреля 2011

У MVC всегда были помощники Ajax с момента его первого выпуска. Они позволяют создавать html-элементы с поддержкой ajax. Однако в ASP.NET MVC 3 эти помощники были значительно улучшены. Они больше не полагаются на клиентские библиотеки MS-Ajax для выполнения своей работы - вместо этого они используют jQuery и ненавязчивые расширения jQuery, которые поставляются с MVC3. Они также используют атрибуты данных HTML5 для аннотирования определенного элемента метаданными, а не для определения встроенных сценариев.

Приведенный выше пример теперь генерирует следующую разметку с MVC3:

code

Итак, включите jQuery и сценарии jQuery.unobtrusive-ajax и используйте javascript для отправки формы, если она включена.

Также взгляните на http://dotmac.rationalmind.net/2011/03/basic-ajax-with-mvc3-razor/

1 голос
/ 22 апреля 2011

Asp.net MVC и Ajax

Как упомянул @Dipti Mehta, в Asp.net MVC начиная с V1 встроено Ajax помощника, но я хотел бы отметить, что это не единственный способделать это (и, как я вижу, не многие разработчики используют эту возможность).

Итак, что еще есть в терминах Ajax?Что ж.Вы можете использовать обычные Html помощники и писать довольно простой код jQuery.Таким образом, у вас есть полный контроль над обработкой вашего клиента (будь то специальное форматирование данных, подготовка сложного объекта, который должен быть отправлен на сервер и т. Д.).

Но в целом я также хотел бы указать вам на несколькопосты в блоге, которые покажут вам некоторые очень полезные повседневные сценарии, с которыми вы можете столкнуться при разработке приложений Asp.net MVC + Ajax:

...