MVC2 - Как разместить общий элемент управления LOGIC (например, поиск / поиск) на каждой странице?

У меня проблемы с выяснением, как сделать следующее:

На каждой странице (или на каждой странице, которую я так желаю) я хотел бы разместить общий виджет управления (например, подумать - Функция поиска, которая содержит текстовое поле + кнопка). Каков наилучший способ сделать это, и кто обрабатывает кнопку отправки (при условии, что это кнопка отправки)?

то есть как выглядит мой ViewUserControl? Есть ли у него форма? он использует jQuery onclick""? Публикует ли он метод действия основного представления или я могу перенаправить его на другой контроллер / действие?

Я попытался использовать RenderAction для "Search.ascx", который содержит форму, и обрабатывается моим SearchController... но в SearchController, он затем пытается вызвать RedirectToAction... и я получаю жалобу о RedirectActions, не разрешенных на Детские Действия.

Я немного растерялся, что делать дальше, поэтому предложения очень приветствуются! луч

5 ответов

Вы, кажется, на правильном пути (используя ViewUserControl а также RenderPartial). Но с предоставленной вами информацией непросто увидеть, какие у вас другие проблемы (RenderAction, ...)

Это легко:

  • Создайте UserControl (.ascx) и получите там форму с URL-адресом /search/..., которую вы можете получить обратно.
  • В ваших представлениях вызовите RenderPartial и предоставьте имя представления
  • Создайте свой контроллер для получения сообщения из вашего поиска. Это не тот же контроллер, что и ваш родительский контроллер представления.

Лучший способ показать элементы HTML - это разместить их на главной странице или в частичной части, на которую ссылается ваша главная страница. Я хотел бы, чтобы это была его собственная форма и отправлял на ваш SearchController.

Дайте мне знать, если вы хотите больше подробностей.

Какой лучший способ сделать это

Вероятно, частичное представление. Файл.ascx.

и кто обрабатывает кнопку отправки (при условии, что это кнопка отправки)?

Частичный вид

как выглядит мой ViewUserControl? Есть ли у него форма?

Да, это имеет форму. Он должен быть настолько самодостаточным, насколько это возможно.

он использует jQuery onclick""? Публикует ли он метод действия основного представления или я могу перенаправить его на другой контроллер / действие?

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

Я попытался использовать RenderAction для "Search.ascx", который содержит форму, и обрабатывается моим SearchController... но в SearchController, он затем пытается вызвать RedirectToAction... и я получаю жалобу о RedirectActions, не разрешенных на Детские Действия.

Возможно, вы захотите отрендерить его с помощью RenderPartial в родительском представлении:

<%: Html.RenderPartial("MyPartialView.ascx") %>

Хорошо, я понял, в чем была моя проблема. Ответы выше верны. У меня есть свой собственный пользовательский элемент управления Search.ascx и SearchController, я также использовал RenderPartial, но меня обескуражило то, что я забыл явно указать контроллер / действие... так что я возился с событиями onclick и Url.Action на моем кнопка вместо.

<% using (Html.BeginForm("MySearchAction", "MySearchController")) { %>

Спасибо всем, кто ответил.

RenderPartial - это путь сюда. Ваш control.ascx будет состоять из его формы и кнопки отправки.

Другие вопросы по тегам