ASP.NET MVC - 主页面的代码后台

6

我是ASP.NET MVC 1.0的新手,正在从使用VS2008 .NET3.5构建的传统应用程序进行转换。我创建了一个主页面,并且菜单必须从数据库中读取。现在,在经典的ASP.NET3.5 VS2008中,将HTML生成到适当的菜单div中的代码存储在主页面的代码后面。

我现在无法理解ASP.NET MVC 1.0中主页面代码后面的位置在哪里?

有人有示例吗?

谢谢

5个回答

7
在MVC中不再使用Code-Behind类。你需要的是一个Partial视图。 你可以这样使用它:
<% Html.RenderPartial("MainMenu.ascx", ViewData["Menu"]); %>

如果这个菜单要出现在所有页面上,你可以让控制器子类化一个自定义控制器类,该类始终首先填充菜单数据。
如果修改MVC继承层次结构过于复杂,你也可以创建一个MenuController类,并在视图/主控制器中使用RenderAction。
<% Html.RenderAction<MenuController>(x => x.MainMenu()); %>

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)
    {
    }
}

3
好的,他问了 - 我回答了。此外,可能会有法律案件,你永远不知道。 - Egor Pavlikhin
同上 - 他问了,这就是答案。 - 101010
我将一个十年前的asp.net网站迁移到了新的项目类型,并需要这样做。希望以后我们可以将其删除。 - Rhyous

3
你的母版页现在是一个视图,而视图应该是被动的。换句话说,它们不应该自己去查找东西。
在 ASP.NET MVC 的上下文中,从模型中获取所需数据会是一种更正确的方法。
请参阅此 SO 问题以了解相关讨论。

我认为参考的例子,使用ViewModel对象有点过于复杂了。 - Matt Kocaj
1
@cottsak 我不这样做;因为一旦你开始使用ViewModels,你会意识到你很高兴没有用魔术字符串的方式。 - George Stocker

3

ASP.NET网站上有一份很棒的教程,展示了如何准确地做到这一点。

简单来说,您可以通过ViewData集合将数据传递给主页面。要将数据放入ViewData中,请创建一个应用级别的控制器。让页面控制器从应用程序控制器继承,而不是基本的MVC控制器。

此外,如果您需要在主页面上对页面显示做出反应,通过该应用程序控制器,您可以连接到ActionExecuting事件。这将为您提供有关当前正在处理的页面请求上下文的信息。


这是一个非常棒的教程,很好地解释了控制器扩展选项。 - wm_eddie

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接