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

Мне трудно понять, как сделать следующее:

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

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

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

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

Ответы [ 5 ]

1 голос
/ 14 января 2011

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

Это просто:

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

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

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

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

0 голосов
/ 14 января 2011

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

Возможно частичное представление.Файл .ascx.

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

Частичное представление

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

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

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

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

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

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

<%: Html.RenderPartial("MyPartialView.ascx") %>
0 голосов
/ 14 января 2011

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

0 голосов
/ 14 января 2011

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

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

...