从独立于控制器的共享局部视图访问模型

时间:2012-01-11 10:29:53

标签: asp.net asp.net-mvc-3

我正在asp.net mvc 3中创建一个简单的网页。

我有一个侧栏,可以加载随机引文,侧栏位于每个页面上,因此它是布局的一部分,与控制器无关。

从该视图访问数据模型的正确方法是什么?我是否必须从每个控制器传递数据?

我的部分视图文件类似于:

@model MvcApplication1.Models.CitationModel
@Model.Citation

但这导致空引用。

该模型类似于

   public class CitationModel
{
    public string Citation{ get { return "Test"; } }
}

3 个答案:

答案 0 :(得分:7)

我会通过儿童行动来做到这一点。这样,您可以保持视图强类型(没有viewbag或viewdata),而不必将其放入发送到您的布局的“主”视图模型中:

<div id="sidebar">
    @Html.Action("RandomCitations", "Citations")
</div>

在CitationsController中:

[ChildActionOnly]
public PartialViewResult RandomCitations()
{
    var model = new CitationModel();
    // populate model
    return PartialView(model);
}

您的视图将保持不变,并将注入每个布局的侧边栏div。

答案 1 :(得分:0)

那里有很多场景。 对于那些情况,我把模型放到查看包中,然后从视图中获取它。

答案 2 :(得分:0)

我会使用这样的基本控制器类:

public class ApplicationController : Controller
    {
        public ApplicationController()
        {
           Citation c = getYourCitation();

           ViewBag.Citation = c;
        }
}

让所有控制器继承自Application controller

public class HomeController : ApplicationController
    {
       //Controller code
    }

然后,每个视图(包括_Layout)都可以访问ViewBag

_Layout.cshtml中的

执行此操作:

@Html.Partial("_CitationPartial", (Your.MidTier.Models.Citation)ViewBag.Citation)