ASP.NET MVC - 母版页的代码

时间:2009-11-09 08:54:01

标签: asp.net asp.net-mvc code-behind

我是ASP.NET MVC 1.0的新手。我正在转换使用VS2008 .NET3.5构建的经典应用程序。我创建了一个母版页,必须从数据库中读取菜单。现在,在经典ASP.NET3.5 VS2008中生成HTML到相应菜单div的代码是在母版页的代码背后。

我现在无法理解母版页的代码在ASP.NET MVC 1.0中的位置?

有人有例子吗?

由于

5 个答案:

答案 0 :(得分:7)

在MVC中,不再有Code-Behind类。你想要的是偏爱。

你会这样使用它:

<% Html.RenderPartial("MainMenu.ascx", ViewData["Menu"]); %>

如果此菜单将出现在您的所有页面中,您可以使控制器子类化一个自定义控制器类,该类始终首先填充菜单数据。

如果搞乱MVC继承层次结构是过度的话,你也可以制作一个MenuController类并在你的视图/ master中使用RenderAction:

<% Html.RenderAction<MenuController>(x => x.MainMenu()); %>

答案 1 :(得分:6)

如果需要,您仍然可以使用代码。在你的.master文件中:

<%@ Master Language="C#" AutoEventWireup="true" 
Inherits="Site_Master" CodeFile="Site.Master.cs" %>

然后在你的.master.cs中:

public partial class Site_Master : ViewMasterPage
{
    protected void Page_Load(object sender, EventArgs e)
    {
    }
}

答案 2 :(得分:3)

您的母版页现在是视图,而视图应该是被动的。换句话说,他们不应该自己去查找事物。

从模型中提取所需数据将是一种更正确的方法(在ASP.NET MVC的上下文中)。

请查看this SO question进行相关讨论。

答案 3 :(得分:3)

ASP.NET site上有一个很棒的教程,展示了如何做到这一点。

简而言之,您通过ViewData集合将数据传递到母版页。要将数据导入ViewData,请创建应用程序级控制器。让页面控制器继承应用程序控制器而不是基础MVC控制器。

此外,如果您需要在主页面上执行操作以响应正在显示的页面,则可以通过此应用程序控制器绑定到ActionExecuting事件。这将为您提供有关当前正在处理的页面请求的上下文的信息。

答案 4 :(得分:1)

就个人而言,我更喜欢使用强类型视图和ViewModel。如果您的母版页需要数据,则为其创建ViewModel。确保每个页面的ViewModel都继承自此基础ViewModel。同样,创建一个每个其他控制器继承的基本控制器。使用Action Filters将允许您确保隐式填充主ViewModel。有关示例,请参阅this