我是ASP.NET MVC 1.0的新手,正在从使用VS2008 .NET3.5构建的传统应用程序进行转换。我创建了一个主页面,并且菜单必须从数据库中读取。现在,在经典的ASP.NET3.5 VS2008中,将HTML生成到适当的菜单div中的代码存储在主页面的代码后面。
我现在无法理解ASP.NET MVC 1.0中主页面代码后面的位置在哪里?
有人有示例吗?
谢谢
我是ASP.NET MVC 1.0的新手,正在从使用VS2008 .NET3.5构建的传统应用程序进行转换。我创建了一个主页面,并且菜单必须从数据库中读取。现在,在经典的ASP.NET3.5 VS2008中,将HTML生成到适当的菜单div中的代码存储在主页面的代码后面。
我现在无法理解ASP.NET MVC 1.0中主页面代码后面的位置在哪里?
有人有示例吗?
谢谢
<% Html.RenderPartial("MainMenu.ascx", ViewData["Menu"]); %>
<% Html.RenderAction<MenuController>(x => x.MainMenu()); %>
<%@ 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)
{
}
}
在ASP.NET网站上有一份很棒的教程,展示了如何准确地做到这一点。
简单来说,您可以通过ViewData集合将数据传递给主页面。要将数据放入ViewData中,请创建一个应用级别的控制器。让页面控制器从应用程序控制器继承,而不是基本的MVC控制器。
此外,如果您需要在主页面上对页面显示做出反应,通过该应用程序控制器,您可以连接到ActionExecuting事件。这将为您提供有关当前正在处理的页面请求上下文的信息。
就我个人而言,我更喜欢使用强类型视图和ViewModel。如果您的主页面需要数据,则为其创建一个ViewModel。确保每个页面的ViewModel都从此基本ViewModel继承。同样,创建一个基础控制器,让其他所有控制器都从中继承。使用Action Filters可以确保主ViewModel隐式填充。请参见this示例。