ASP.NET MVC: повторное использование представления двумя действиями контроллера

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

Спасибо

Ответы

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

И ваш Edit View будет выглядеть так:

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

Ответ 3

Я бы использовал jQuery ajax. Нажатие на Add или Edit вызовет действие serve, которое вернет тот же PartialView (если вы хотите его повторно использовать). Затем, в функции успеха ajax-вызова, вы должны просто поместить возвращенный html (из этого PartialView) в определенную часть вашей страницы (или всплывающее окно).

Приятная и чистая и без перезагрузки страницы...