2009-04-02 3 views
1

ОК, теперь мне интересно, как обрабатывать вкладки навигации с помощью ASP.NET MVC. Приведем пример, предположим, что у вас есть вкладки, как у вас здесь, в stackoverflow. Итак, вопросы, теги, пользователи и т. Д.MVC Navigation Tabs

Теперь скажем, что у вас есть «подкладка» под этим основным. Так появились, например, вкладки «Вид» и «Добавить», отображаемые после выбора основной вкладки «Вопросы». Некоторые вопросы:

  • было бы лучше, чтобы иметь набор маршрутов, как http://site/questions/view и http://site/questions/add для этих двух случаев?

  • Возможно, у вас есть NavigationController, который содержит действия для каждой из основных вкладок, то есть вопросы, теги и т. Д., А затем и значение id для подзаголовки i.e. View и Add. Тогда это даст вам что-то вроде следующего:

общественности ActionResult Вопросы (вид строки)

общественное ActionResult Теги (вид строка)

Etc

  • Или вы иметь контроллер на вкладку/элемент навигации, и если да, то как это будет реализовано?

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

Заранее спасибо за любые указатели

ответ

2

Лучше бы придерживаться REST. Я бы придерживался наличия контроллера на главной вкладке, и каждая подзапись соответствовала возможным действиям REST: index, new. Редактирование и удаление являются предметными, поэтому не будут получать вкладки. Create вызывается новым и обновляется редактированием.

Исключением из этого примера будет вкладка «Задайте вопрос». Он находится на том же уровне, что и вкладка «Вопросы» (индекс), но вызовет «Вопросы/Новый».

1

Я думаю, что ваши контроллеры должны быть более тесно связаны с вашей моделью, чем ваш пользовательский интерфейс (см. Мой ответ на this question). В общем, я думаю, вам следует подумать о том, что контроллер управляет входными данными для вашей модели, т. Е. Что-то делать с моей моделью, а затем возвращает представление (UI), соответствующее этому действию. Элементы вашего пользовательского интерфейса могут, но необязательно, отражать иерархию модели. Например, Questions, Unanswered и Ask a Question в SO все, похоже, относятся к модели вопроса, но все они являются элементами интерфейса верхнего уровня. Unanswered также, похоже, имеет собственный контроллер, но может быть легко применен как .../questions/unanswered, а не как .../unanswered.

+0

ОК, но скажите, что ваши вкладки были только частью сайта. Например, можно сказать, что это сайт банка, и у вас были различные разделы, такие как кредитные карты, банковские счета, ипотечные кредиты и т. Д. У вас есть контроллер на каждый логический раздел, например. CreditCardController или контроллер на главную вкладку в этом разделе? –

+0

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