ASP.NET MVC: повторное использование View двумя действиями контроллера - PullRequest
16 голосов
/ 17 мая 2011

Представления «Добавить» и «Редактировать» обычно более или менее идентичны. Как я могу использовать View так, чтобы оба Foos/Add и Foos/Edit/[Id] использовали его? Как будут выглядеть действия?

Спасибо

Ответы [ 3 ]

25 голосов
/ 17 мая 2011

Просто укажите имя представления при вызове метода View(), например

public ViewResult Add() {
  //...
  return View("Foo");
}

public ViewResult Edit(int id) {
  //...
  var model = repository.get(id);
  return View("Foo", model);
}

Ваше представление должно обрабатывать нулевые / пустые значения модели для действия Add, иначе вы можете заполнить модель значениями по умолчанию.

7 голосов
/ 17 мая 2011

Возможно, вы захотите использовать шаблон редактора, а не использовать одно и то же представление.Шаблон редактора - это частичное представление, которое используется для редактирования и / или вставки данных.

Для этого потребуются отдельные представления, но код будет минимальным.Основная часть кода будет находиться в шаблоне, который вы будете использовать для действий добавления и редактирования.

После того, как вы создадите шаблон , ваш вид представления будет выглядеть (Razor):

@model Models.Foo    
<h2>Add</h2>
<p>
@Html.EditorFor(model => model)  // equivalent to EditorForModel()
</p>

И ваш вид редактирования будет выглядеть так:

@model Models.Foo    
<h2>Edit</h2>
<p>
@Html.EditorFor(model => model)  // equivalent to EditorForModel()
</p>
0 голосов
/ 17 мая 2011

Я бы использовал jQuery ajax. Нажатие на кнопку «Добавить» или «Изменить» вызовет действие обслуживания, которое вернет тот же PartialView (если вы хотите использовать его повторно). Затем, в функции успеха вызова ajax, вам просто нужно поместить возвращенный HTML (из этого PartialView) в определенную часть вашей страницы (или всплывающее окно).

Красиво и чисто и без перезагрузки страницы ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...