#asp.net-mvc #asp.net-mvc-4 #razor
#asp.net-mvc #asp.net-mvc-4 #razor
Вопрос:
Я видел, как использовать частичные представления из представления, и я понимаю, как модель передается из представления в частичное представление. Чего я не понимаю, так это как включить частичное представление внутри _Layout.cshtml, чтобы я мог передать его частичному представлению — или как само частичное представление может вызывать действие контроллера для создания модели для использования.
В частности, я хочу включить частичное представление в _Layout.cshtml для отображения в заголовке каждой страницы. Частичное представление отобразит пользовательскую настройку в профиле пользователя. Я не могу придумать никакого способа получить модель без вызова действия контроллера — но как это делается в / для частичного просмотра из _Layout.cshtml?
Является ли мой единственный вариант доступа к действию контроллера для построения требуемой модели моего частичного представления для использования вызова jQuery? Или есть другой способ?
Ответ №1:
Ответ заключается в вызове @Html.Action()
.
Похоже, вы на правильном пути.
Ключ в том, чтобы стараться не передавать несколько моделей, усложнять модели или использовать ViewBag без необходимости.
Вместо этого каждый раз, когда вам нужна информация на каждой странице, вызывайте действие из вашего _Layout .
Например, у вас может быть контроллер с именем PartialsController
или SharedController
.
public class PartialsController : Controller
{
[ChildActionOnly]
public ActionResult UserProfilePartial()
{
UserProfileModel model = new UserProfileModel();
return PartialView("_UserProfile", model);
}
}
Это ChildActionOnlyAttribute
означает, что пользователи не могут получить прямой доступ к действию. Только ваш код может вызвать действие. Вы также можете применить атрибут к контроллеру, чтобы он автоматически влиял на все действия.
Теперь вызовите действие из вашего представления (_Layout).
@Html.Action("UserProfilePartial", "Partials")
Комментарии:
1. Роуэн и Тайсон, я использовал практически тот же подход, что и Роуэн (спасибо за подробности), и он работает — пока я не отправляю форму. Например, это работает, когда отображается страница входа в систему, но когда я нажимаю кнопку отправки для входа в систему, мой PartialView не найден. Возврат [HttpPost] частичного представления равен
return PartialView();
. Вы показываете GET, как мне вернуться из действия POST Controller?2.
return PartialView("_UserProfile", model);
Похоже, то же самое работает в сообщении.3. Трудно ответить, не зная, что вы пытаетесь сделать. Возможно, вам придется опубликовать еще один вопрос, указав требования к HttpPost и, возможно, со скриншотами / рисунками, чтобы продемонстрировать, что вы делаете.