Я предложу несколько контраргументов на ответ @ druttka. Но в основном вы должны решить, какую сделку вы хотите совершить.
Если вы используете модель для своего обзора, теперь вы заставляете 2 вещи:
- Каждый вид должен быть строго напечатан
- Каждое действие должно вызывать функцию для заполнения всех уровней навигации, включенных в вашу модель представления
Первый пункт не так уж и плох, потому что на типичном нестатическом сайте очень мало страниц, которые в любом случае не будут производными от модели, и достаточно просто создать пустую модель для этих страниц. Однако второй момент гораздо более раздражает. Каждая функция должна создавать свою собственную модель, а затем заполнять свойства nav для каждого уровня навигации, предоставляемого моделью. Это может быть довольно громоздким, но может быть довольно элегантно обработано в OnActionExecuted
по крайней мере для nav, который не является специфическим для данного действия.
Альтернатива - добавить навигацию к ViewBag
. Это может быть сделано всякий раз, когда вам не нужно указывать модель для каждого представления, что очень удобно для тех случаев, когда вам не нужно указывать модель. Однако следует отметить, что ViewBag
в asp.net mvc 3 относится к типу dynamic, который нельзя использовать в качестве параметра в лямбда-функции, что не позволяет вам делать что-то вроде @Html.DisplayFor(viewBag => viewBag.MainNav)
в макете, который является реальное сопротивление Тем не менее, вы все равно можете выполнить частичное отображение и указать соответствующий DisplayTemplate.