2012-04-07 4 views
1

У меня есть вид с именем Index.cshtml с таблицей пользователей (создавать/редактировать/обновлять функции).У меня возникли проблемы с отображением результатов

enter image description here

При нажатии кнопок (создание/редактирование/обновление) защелкиваются У меня есть диалоговое окно JQuery для него. Далее я использую AJAX пост как это:

  • Edit >> вызвать контроллер действий для редактирования и возвращает таблицу JSON >> обновление строки с Javascript
  • Delete >> вызвать контроллер действия для удаления и возвращать json >> удалить таблицу строк с javascript
  • Создать >> вызвать контроллер действий для создания и перенаправления на Index.cshtml >> ???

Для создания части у меня есть проблема: я хотел бы «просто» показать свое представление, но я нахожусь в сообщении ajax. Я не знаю, как это сделать.

Вот мой код (представление данных, а затем освежающий вид):

 $.post($(this).attr('action'), $(this).serialize(), function (data, status) { 
      $('#my-modal').modal('hide'); 

      if (data.operation == 'edit') { 
       // Edit 
       var row = $('#' + data.userid); 
       row.children(':eq(0)').text(data.company); 
       row.children(':eq(1)').text(data.username); 
       row.children(':eq(2)').text(data.email); 
       row.children(':eq(3)').text(data.firstname); 
       row.children(':eq(4)').text(data.lastname); 
      } else if (data.operation == 'delete') { 
       // Delete 
       var row = $('#' + data.userid); 
       row.remove(); 
      } else { 
       // Create 
       alert(data); 
       $("#userList").html(data); 
      } 
     }) 

Как вы можете видеть, я проверяю data.operation, который говорит мне, что если я делаю «изменить» или «удалить» of (последняя возможность) a 'create'. Для создания проблемы заключается в том, что весь мой вид (< html> < body> ...) генерируется и добавляется в div #userList. Это повторяющиеся вещи.

Возможно, это неправильная вещь?

Спасибо.


ОБНОВЛЕНО

Вот мой Создать действие:

[HttpPost] 
    public ActionResult Create(UserCreateViewModel viewModel) 
    { 
     if (!ModelState.IsValid) 
     { 
      this.Response.StatusCode = 400; 
      return PartialView("Create", viewModel); 
     } 

     var userDTO = new UserDTO(); 
     Mapper.Map(viewModel, userDTO); 
     _requestServiceClient.CreateNewUser(userDTO); 
     return RedirectToAction("Index"); 
    } 

Вот мой Индекс действие:

[Authorize] 
    public ActionResult Index(string q, int? page) 
    { 
     var users = _requestServiceClient.GetUsers(); 
     ... 
     ... 
     if (Request.IsAjaxRequest()) 
      return PartialView(userListPaged); 
     else 
      return View(usersListPaged); 
    } 

После relexion, в случае «создать», может быть, лучше на мой взгляд, просто перезагрузить страницу, как это:

  ... 
      } else if (data.operation == 'create') { 
       // Create >> refresh the page 
       location.reload(); 
      } 

Спасибо в любом случае.

+0

Пожалуйста, разместите свое действие «Создать», а затем я смогу помочь. – Marc

+0

Я обновил свой вопрос, чтобы показать код. Благодарю. – Bronzato

ответ

0

Если ваш список не слишком длинный, я бы предложил отправить полный список в каждом запросе ajax, не имеет значения, обновляется, создается или удаляется.

Таким образом, вы можете удалить проверку работы данных (ваш материал: eq (0) не удастся, если вы однажды измените порядок столбцов) и просто поместите результат из запроса ajax в ваш #userlist div.

EDIT

Но чтобы решить вашу создать проблему:

Просто заменить на Создание действия этой линии:

return RedirectToAction("Index"); 

с этой линии:

return PartialView("Index", _requestServiceClient.GetUsers()); 

и он должен возвращать только новый список.

EDIT2

Хорошо, ваш Index.cshtml, кажется, полный макет, а не только список, как я думал. Таким образом, вы должны сделать это в первую очередь:

  1. двигает только HTML-код, необходимый для построения списка в отдельном View, назовите его _List.cshtml, например
  2. На том месте, где HTML-код был в вашем Index.cshtml положил @Html.Partial("_List") там
  3. на данный момент ваш взгляд индекс должен выглядеть так же, как и раньше, но у вас есть представление списка seperatly
  4. Изменить мой пример выше, чтобы не возвращать индекс, кроме _List парциальное: return PartialView("_List", _requestServiceClient.GetUsers());

Я надеюсь, что это сработает для вас.

+0

Я попробую (верните PartialView («Index, ....)), и полный html отправлен назад (< HTML>< BODY> ...) .Нет, что я хочу. Спасибо в любом случае. – Bronzato

+0

Я добавил блок« EDIT2 »к моему ответьте, пожалуйста, попробуйте – Marc

0

Поместите этот код в ваш частичный вид:

@{ 
    Layout = null; 
} 

Этот код говорит, что вам не нужен мастер-представление для этой страницы.