我正在asp.net mvc 3中创建一个简单的网页。
我有一个侧栏,可以加载随机引文,侧栏位于每个页面上,因此它是布局的一部分,与控制器无关。
从该视图访问数据模型的正确方法是什么?我是否必须从每个控制器传递数据?
我的部分视图文件类似于:
@model MvcApplication1.Models.CitationModel
@Model.Citation
但这导致空引用。
该模型类似于
public class CitationModel
{
public string Citation{ get { return "Test"; } }
}
答案 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)