2014-09-17 3 views
0

У меня есть WebGrid на моей форме с одним из колонны с ActionLink как:Редактировать модель - Есть ли лучший способ?

Html.ActionLink((string)item.Name, "Edit", new { id = item.Id }) 

Целью ниже код, чтобы показать экран редактирования как всплывающее окно модального и пост обновленного объекта успешно.

Controller - Получить:

public ActionResult Edit(int id) 
{ 
    ... //Fetch employeeViewModel @id 
    TempData["StateData"] = employeeViewModel ; 
    TempData["ViewState"] = "Edit"; 

    return RedirectToAction("Index"); 
} 

Index.cshtml:

@if (TempData.ContainsKey("ViewState") && TempData["ViewState"].ToString() == "Edit") 
{ 
    EmployeeViewModel employeeViewModel = (employeeViewModel)TempData["StateData"]; 
    @Html.Partial("_EditEmployee", employeeViewModel) 

    <script language="javascript"> 
     $(window).load(function() { 
      $('#editEmployeeModal').modal('show'); 
     }); 
    </script> 
} 

Изменить форму:

<div class="modal fade" id="editEmployeeModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true"> 
    <div class="modal-dialog"> 
... 

Все это работает отлично с полным циклом Get/Post модели редактирования. Однако я обеспокоен дополнительной поездки, что я делаю в контроллер-Получ:

return RedirectToAction("Index"); 

Может кто-нибудь, пожалуйста, руководство для лучшего подхода?

Спасибо!

ответ

0

Просто общий указатель: вам не нужно заходить на сервер, чтобы открыть модальный диалог в браузере. Вы можете сделать это просто отлично в javascript. Некоторые из общих библиотек javascript уже имеют модальные всплывающие окна, которые вы можете использовать/настраивать/брать и т. Д. В соответствии с вашими потребностями. Просто google "всплывающее окно javascript" для большого количества информации.

+0

Спасибо Стив, но не мой код с помощью js для загрузки модального всплывающего окна - $ ('# editEmployeeModal'). Modal ('show'); Мне просто интересно, как мне вернуться из действия «Редактировать контроллер», поэтому мне не нужно вызывать - вернуть RedirectToAction («Index»); – user1552869

0

Цель нижеследующего кода - показать экран редактирования как Модальное всплывающее окно и опубликовать обновленный объект успешно.

Прежде чем напрямую ответить на ваш вопрос, я хочу поговорить об этом на мгновение. Вы должны быть уверены, что модальный - правильный выбор. Есть ли какое-то состояние, которое нужно сохранить? Имеет ли модальность лучший пользовательский интерфейс? Модальная работа на платформах и с более старыми технологиями?

Использование модалов почти всегда более сложно, чем просто перенаправление на другую страницу, а затем обратно. Взвесьте дополнительную сложность в отношении пользователя. Если это не оправдано, то откажитесь от него. Также подумайте о странных ситуациях, с которыми вы можете столкнуться. Что происходит, когда ваш модальный должен открыть другой модальный?

Теперь реальный вопрос ... Как заставить его работать. Короче говоря, используйте AJAX.

@Html.ActionLink((string)item.Name, "Edit", new { id = item.Id }) 

Имейте это открытое модальное. Модаль содержит элемент формы AJAX (Ajax.BeginForm()) и POST для вашего действия «Редактировать».

Теперь нет перенаправления. Когда действие завершается, выполните функцию функции javascript через форму Ajax AjaxOptions, которая закрывает модальную (или показывает проверку). Пользователь никогда не покидает страницу через весь процесс.