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 будет состоять из его формы и кнопки отправки.