ASP .NET MVC - Как перенаправить пользовательский элемент управления на представление его из? - PullRequest
0 голосов
/ 04 марта 2012

У меня есть пользовательский элемент управления, который создает новую запись в базе данных. После создания новой записи я бы хотел перенаправить ее обратно на просмотр из. Цель этого состоит в том, чтобы обновить представление, чтобы оно могло показать вновь созданную запись. Проблема в том, что пользовательский элемент управления может существовать в нескольких представлениях, так как я могу узнать, из какого представления находится пользовательский элемент управления? чтобы я мог добиться вышеописанного сценария? Спасибо,

RWendi

Ответы [ 3 ]

2 голосов
/ 04 марта 2012

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

Нет, это не так.Он просто отображает HTML, и ничего больше.

Это действие контроллера, которое создает новую запись в базе данных, и, следовательно, именно здесь должно произойти перенаправление.

Действие [HttpPost] , которое принимает модель/ форма должна выполнить перенаправление после завершения сохранения.

Например:

public ActionResult Save(SomeModel model)
{
   db.Save(model);
   return RedirectToAction("Index");
}

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

В примечании не следует использовать пользовательские элементы управления (например, частичные) для визуализации форм.

Выследует использовать редактор шаблонов .Код представления, который отображает форму (и указывает, какое действие следует публиковать) должен быть в представлении, а не в пользовательском элементе управления.

EDIT - пример того, как визуализировать форму в представлениях:

Вместо того, чтобы делать это в представлении:

@Html.Partial("_SomeModel")

Сделайте это:

@using (Html.BeginForm()) {
   @Html.EditorFor(model => model.SomeModel)
}

И поместите разметку формы в шаблон редактора.Ключевым моментом здесь является то, что за настройку формы должны отвечать IMO, а не пользовательский элемент управления.

1 голос
/ 04 марта 2012

Есть несколько способов,

1) Вы можете использовать this.Request.UrlReferrer.AbsoluteUri, который всегда даст вам URL вашей страницы.

2) Или вы можете иметь скрытое свойствов ... в PartialView, который будет содержать значение для текущего URL.(@this.ViewContext.ParentActionViewContext.HttpContext.Request.UrlReferrer.AbsoluteUri) Но только если вы используете @ Html.RenderAction.

В дочернем действии вы можете перенаправить на любой из указанных выше URL-адресов.(Первый подход намного лучше и будет работать во всех сценариях)

0 голосов
/ 04 марта 2012

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

У вас могут быть сценарии (или представления), в которых вставка выполняется одним действием, а затем передавать запрос другому действию (возможно, списку), который показывает вновь созданную запись.

Или у вас могут быть другие сценарии, в которых вставка является лишь частью того, что вы хотите сохранить в БД, а обновление исходного представления может привести к потере данных.

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

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