【问题标题】:MVC - How to include a model inside _Layout for Partial ViewMVC - 如何在局部视图的 _Layout 中包含模型
【发布时间】:2014-06-27 08:20:31
【问题描述】:

我已经了解了如何在视图中使用局部视图,并且我了解如何将模型从视图传递到局部视图。我不明白的是如何在 _Layout.cshtml 中包含一个 Partial View,以便我可以将它传递给 Partial View - 或者,Partial View 本身如何调用 Controller Action 来创建一个模型以供使用。

具体来说,我想在 _Layout.cshtml 中包含一个局部视图,以显示在每个页面的标题中。部分视图将在用户配置文件中显示自定义设置。如果不进行控制器操作调用,我想不出任何方法来获取模型 - 但这是如何在 _Layout.cshtml 中的部分视图中/为部分视图完成的?

访问控制器操作以构建部分视图所需的模型以使用 jQuery 调用是我唯一的选择吗?还是有别的办法?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    答案是致电@Html.Action()

    听起来你是在正确的轨道上。

    关键是尽量传递多个模型,使模型复杂,或不必要地使用 ViewBag。

    相反,只要您想了解每个页面的信息,请从您的 _Layout 中调用一个操作。

    例如,您可能有一个名为 PartialsControllerSharedController 的控制器。

    public class PartialsController : Controller
    {
        [ChildActionOnly]
        public ActionResult UserProfilePartial()
        {
            UserProfileModel model = new UserProfileModel();
    
            return PartialView("_UserProfile", model);
        }
    }
    

    ChildActionOnlyAttribute 表示用户无法直接访问该操作。只有您的代码可以调用该操作。您还可以将该属性应用于控制器,以便它自动影响所有操作。

    现在从您的视图中调用操作 (_Layout)。

    @Html.Action("UserProfilePartial", "Partials")
    

    【讨论】:

    • Rowan 和 Tieson,我使用的方法与 Rowan 提供的方法几乎相同(感谢您提供详细信息)并且它有效 - 只要我不发布表格。例如,它在显示登录页面时有效,但是当我单击提交按钮登录时,找不到我的 PartialView。 PartialView 的 [HttpPost] 上的返回是return PartialView();。您正在显示 GET,我如何从 POST 控制器操作返回?
    • 相同的return PartialView("_UserProfile", model); 似乎在 POST 中有效。
    • 在不知道您要做什么的情况下很难回答。您可能需要发布另一个问题,说明 HttpPost 要求,并可能使用屏幕截图/绘图来展示您在做什么。
    猜你喜欢
    • 2012-11-26
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-16
    • 1970-01-01
    相关资源
    最近更新 更多