2009-09-10 11 views
5

Увидев, что наша команда поддерживает Интранет, у которого есть клиентов пользователей, которым разрешено использовать javascript, мы знаем, что мы можем вмешаться и начать использовать jQuery более «тщательно». Наша система очень большая, поэтому, хотя мы используем области в нашем приложении ASP.NET MVC, огромное количество страниц для добавления, редактирования, удаления и просмотра наборов данных для каждой подсистемы области действительно довольно велико. Подсистема области может иметь примерно двадцать таблиц данных. Если есть двадцать таблиц данных, и у вас есть отдельные страницы для добавления, редактирования, удаления и просмотра, что означает, что есть страниц. Теперь представьте, что есть двадцать подсистем для каждой области, тогда в одной области будет 20 * 60 страниц, и у нас есть примерно 15 областей в нашей Интранет. Вы понимаете, это огромно.jQuery CRUD в ASP.NET MVC

Переходя к моей реальной точке, я хочу сократить это, используя возможности jQuery наличия таблицы данных на странице, нажав «удалить», и это даст мне диалог удаления с кнопкой подтверждения, которая будет затем отправьте форму, перенаправьте правильное действие и выполните работу для меня. Теперь мне нужно руководствоваться следующими областями:

  1. Если бы я хотел удалить, не отправляя сообщения вообще с помощью ASP.NET MVC, каков процесс для этого? Это включает в себя удаление удалений, его удаление и проверку его способности удалять (отношения FK должны обрабатываться корректно), а затем, если удалять его и удалять строку из таблицы в представлении, все без обновления страницы.
  2. Как я могу вызвать действие delete из асинхронного процесса с помощью jQuery? Правильно ли это сделать? Обычно мы используем Html.ActionLink. Должен ли я обернуть его в форме?
  3. То же самое относится к редактированию и обновлению, опять же, что это лучший способ сделать это?

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

+1

Просто интересно вы смотрели в Dynamic Framework данных из MS? Я думаю, что это может поддержать MVC, но не положительно. Если я правильно понимаю, это сократит количество ваших страниц. Как я сказал, просто любопытно, посмотрел ли вы на этот сайт. – JoshBerke

+2

Динамические данные не очень хорошо работают с MVC, но MVC 2 имеет шаблонные шаблоны по умолчанию, которые дают вам более полезные части встроенных динамических данных. –

ответ

3

Я работаю над проектом, который использует ссылки на выстрелить удалить действия через AJAX POST (без обратной передачи).

$("a.deleteLink").click(function(event) 
{ 
    event.preventDefault(); 
    if (confirm("Are you sure you want to delete this section?")) 
    { 
     //TODO Display processing indicator 

     var myId = /* id of element */ ; 

     $.post("/Section/Delete", { id: myId }, function(data) 
     { 
      if (data == "Success") 
      { 
       //handle success 
       //TODO Fade out element using .fadeOut() 
      } 
      else 
      { 
       //handle error 
      } 
     }); 
    } 
}); 

Метод контроллера просто находится в /Controllers/SectionController.cs. Принимает только POST, как и любое действие, которое изменяет базу данных.

private SectionRepository secRepo = new SectionRepository(); 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Delete(long id) 
    { 
     Section sec = secRepo.GetById(id); 

     secRepo.Delete(sec); 
     secRepo.Save(); 

     return Content("Success"); 
    } 
+1

Я думаю, это выглядит красиво. Я думаю, что ваш индикатор индикатора '// TODO Display' принадлежит к строке выше/перед действием' .post() ', однако, а не в функции обратного вызова, где он (который будет срабатывать только после того, как ваше действие завершено , пока вы не ожидаете ...) – Funka

+1

Ух, это выглядит хорошо. Я никогда не видел 'return Content (« message »);' before. Почему вы делаете 'if (confirm (" message ") == true)'? Почему не просто 'if (confirm (" message "))'? – Kezzer

+0

Ребята, вы правы. Это еще очень ранний «быстрый и грязный» код. Обратный контент («Успех») в контроллере не отображался. Просто что-то, чтобы javascript знал, что он был успешным. Если у кого-то есть предложения по лучшим способам проверки успешности сообщения ajax, дайте мне знать. Я немного обновил образец кода, чтобы отразить эти элементы. –

2

У Чада Майерса есть good article.

Также one от Dino Esposito.

+0

Dino's кажется довольно информативным и полным. Однако мне нужно будет лучше прочитать его позже. – Kezzer

3

Только что получил просмотр видео на некоторых шаблонах, которые вы можете получить для ASP.NET MVC с Subsonic. Хотя я все еще не реализовал это или даже попробовал, это выглядит невероятно! Посмотрите here.


Я не уверен, если это является возможным вариантом для вашего или нет, но мы в последнее время появилась потребность похожа на вашу, и мы выпускаем наше основное приложение как приложение ASP.NET MVC (с использованием jQgrid), а затем вторичное приложение ASP.NET Web Forms для наших функций администратора с использованием динамических данных. Это работало очень хорошо и спасло нам массу времени.

Он также выглядит как DynamicData and MVC будет собираться вместе в следующих выпусках.

Другое чтение ...
* David Hayden
* rbqsoft
* Sharp Architecture Wiki

0

Если вы хотите, чтобы бросить диалог JQuery к партии, это Ricardo Covo post делает хорошую работу

enter image description here