【问题标题】:Mvc Layout page dynamic contentmvc Layout 页面动态内容
【发布时间】:2014-04-10 09:46:49
【问题描述】:

我有一个 MVC 布局页面(母版页),页眉和页脚中有一些动态内容。

       <header>

        @Html.Action("GetHeader", "Layout")

    </header>

   <div id="body">

           @RenderBody()

    </div>

    <footer>
        @Html.Action("GetFooter", "Layout")
    </footer>

GetHeader 和 GetFooter 操作方法从数据库中获取值到对象中,并根据该对象的页眉/页脚属性返回部分视图。

但问题是我不想对数据库进行两次调用,因为它们都使用相同的对象类型。

那么有什么方法可以让我只调用一次数据库并保留该对象并在整个布局页面中使用它,而无需多次调用数据库?

使用 viewbag 以外的任何解决方案都会非常有帮助。

谢谢!

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-4 layout dynamic master-pages


    【解决方案1】:

    使用静态私有支持字段将值缓存在静态属性中。在 getter 中检查支持字段是否为空。如果为空,则查询数据库并设置它。让属性返回支持字段。

    这应该在您的数据访问层中。这称为单例模式。

    【讨论】:

      【解决方案2】:

      我认为一个好的方法是使用部分定义将部分呈现为视图输出的一部分,然后使用“@RenderSection”方法将它们添加到布局中。

      <header>
         @RenderSection("AdditionalHeader", required: false)
      </header>
      <div id="body">
         @RenderBody()
      </div>
      <footer>
         @RenderSection(("AdditionalFooter", "Layout")
      </footer>
      

      然后在您的视图中创建要渲染的部分:

      @Section AdditionalHeader
      {
         <whatever content you want to generate from action>
      }
      @Section AdditionalFooter
      {
         <whatever content you want to generate from action>
      }
      

      这应该适用于 MVC 3 及更高版本。如果您需要更多详细信息,Scott Guthrie 会写一篇更详细的文章:

      http://weblogs.asp.net/scottgu/asp-net-mvc-3-layouts-and-sections-with-razor

      【讨论】:

        【解决方案3】:

        修改后的答案:

        您可以使用 MVC 中可用的 ViewBag、ViewData 等来存储数据库中的数据并在整个 MVC 应用程序中使用它,而无需再次调用它们。

        这个Link解释了它们,你可以根据你的要求使用它。

        您所要做的就是将数据库中的数据存储在您的主要操作方法中(默认为索引),

        ViewData["Data"]=data;
        

        data 可以是任何类型的对象,它保存数据库中的值。

        在您的视图页面中,您可以将其传递给其他操作方法,例如

        @Html.Action("ActionMethod", (ObjectTypeOfData)ViewData["Data"])
        

        在您的操作方法中,您可以将其作为参数获取,例如,

        public ActionResult ActionMethod(ObjectTypeOfData data){ .... your code ....}
        

        注意:如果您不想在回发期间从数据库中检索数据,请使用 Session 而不是 ViewData

        【讨论】:

          【解决方案4】:

          使用这种方式为共享文件夹中的页眉和页脚创建一个header.cshtml和一个footer.cshtml

          然后使用@{Html.RenderPartial("header");}和@{Html.RenderPartial("footer");}将此.cshtml页面调用到布局页面中

          在 header.cshtml 和 footer.cshtml 页面中,您使用 sql 查询或 linq 查询放置动态值

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2013-03-08
            • 1970-01-01
            • 2019-06-28
            • 2021-11-07
            • 1970-01-01
            • 1970-01-01
            • 2011-04-09
            • 1970-01-01
            相关资源
            最近更新 更多