【问题标题】:Where is the equivalent of WebForms' Master Page codebehind files in ASP.NET MVC?ASP.NET MVC 中 WebForms 的母版页代码隐藏文件的等价物在哪里?
【发布时间】:2013-06-09 18:21:18
【问题描述】:

今天是我使用 MVC 的第一天,我正在尝试将现有的 Web Forms 网站转换为 MVC 4 网站。

我已经阅读了一些内容并开始了解事情是如何工作的,但我无法弄清楚的一件事是 对于新布局(替换 MasterPages)相当于代码隐藏的地方文件?在我当前的站点中,我有一个母版页,它定义了一般外观和感觉,但也在代码隐藏中运行一些代码以动态更改一些内容(用于本地化和数据库生成的菜单系统)。

所以现在我正在使用 MVC 和 Layouts,我不知道我会在哪里编写所有这些代码,谁能指出我正确的方向?

(我知道 MVC 没有代码,它使用控制器。)

【问题讨论】:

  • 这是一个复杂的问题。基本上,没有。查找带有子操作的局部视图。如果您想将active 内容添加到您的布局中,您可能需要使用首先调用控制器操作的局部视图。 Action 能够将模型传递给 View 并成为一种代码形式。
  • 谷歌搜索“带有子操作的部分视图”不会返回任何看起来远程相关的内容,主要是部分视图与部分渲染的比较。但是,如果我对您的理解正确,那么没有简单的方法可以为我的网站提供包含一些动态生成的内容的顶级布局吗?我越是考虑转换为 MVC,就越觉得 MVC 是动态网站的错误方式。
  • 马马虎虎。子 Action 与后面的代码有相似之处。我的布局中有很多动态内容。它总是使用子操作或 AJAX 创建的。
  • 另外,查看章节。它们允许您在视图中定义在布局中呈现的部分
  • 查看这个很好的完整示例,它展示了如何使用 2 个局部视图:c-sharpcorner.com/article/…

标签: asp.net-mvc-4


【解决方案1】:

如你所知,MVC 是三层架构。

  1. 型号
  2. 查看
  3. 控制器

模型是数据实体。您需要存储或显示数据。

视图是将呈现给用户的 html 或表示层。

Controller 是文件背后的代码,您的所有代码都将进入控制器。它从模型中获取数据并应用业务逻辑,然后传递给视图以显示或从视图中获取更新的数据并传递给模型,然后保存到数据库。

_layout.cshtml 文件位于~/Views/Shared/_Layout.cshtml 的路径中。它是 mvc 中的母版页。你会看到你的部分视图包含

Layout = "~/Views/Shared/_Layout.cshtml";

页面顶部的这一行。您可以更改任何视图的母版页,并且可以有多个布局。

布局包含许多局部视图,如左导航、顶部导航和内容。每个都可以从控制器自定义。

以下链接可能对您有所帮助:

【讨论】:

  • 我不想动态更改视图的布局。我希望有一个主布局来定义整个网站的外观和感觉,其中将包含一些动态项目,如导航菜单和一些需要本地化的文本。
  • 我有更新的答案,但我觉得你需要学习一些基础知识并开始练习。这样你就能学得更多、更快。
  • 我多年来一直在 Web 窗体中工作,正如我所说,这是使用 MVC 的第一天。我试图转换我的网站的原因是我可以学习这些东西。不幸的是,对我来说,我无法从阅读中学习,我从查看示例和基于这些示例的工作中学习,但我找不到任何我正在尝试做的事情的示例。我希望在这个网站上得到一些友好的帮助,但看起来这不会发生,所以我只想说螺丝 MVC。我研究得越多,Web 应用程序似乎就越不对。
【解决方案2】:

创建一个 Base Controller 类并让您的所有控制器都继承自它。

WebForms 母版页代码隐藏的 MVC 等价物就是这个基本控制器,您可以在其中放置多个控制器所需的代码。

How can I execute common code for every request?

【讨论】:

    【解决方案3】:

    你找不到任何你正在尝试做的事情的例子,因为在 MVC 中它不是这样完成的。没有相当于代码隐藏的东西。

    你“试图做”错事。 MVC 布局只是模板文件。它们背后没有代码,除了简单的显示逻辑之外,它们应该没有任何功能。

    MVC 是与 WebForms 不同的范例。您不使用像 WebForms 这样的服务器端控件。因此,您在布局中拥有自己的内容的想法违反了 MVC 原则。

    您基本上陷入了所谓的 XY 问题。这就是您尝试实现某些功能 X 的地方,并且您认为要做到这一点您需要做 Y,所以您所问的只是 Y...当 X 是您真正需要询问的时候。

    请解释你正在尝试做的实际事情,不要假设它必须按照你一直做的方式去做。例如,如果您想本地化某些东西,那么请询问如何本地化某些东西。如果您在某处想要动态内容,请询问如何做到这一点,但您需要更具体地了解这些个别问题,而不是像您在此处所做的那样掩饰它们。

    【讨论】:

    • 我想做的是弄清楚如何制作一个我的视图可以在其中运行的布局页面(如母版页到内容页面的关系)并在其中运行 c# 代码。我有一个主导航根据来自 SQL 服务器的数据生成的菜单。 MVC 的布局文件需要以某种方式连接到控制器,以便它可以执行 LINQ 代码以从 SQL 服务器中提取数据并将其分配给菜单系统。需要在子布局上完成相同的功能才能控制侧边菜单。
    • @MatthewVerstraete - MVC 提供了许多可以帮助您执行此操作的功能,包括 Razor 部分、部分视图、操作、Razor 助手、ajax 方法等。等等。有很多方法,而你使用什么很大程度上取决于你的需求,这就是为什么你真的需要更多地了解这些东西,这样你才能自己决定你觉得最好使用哪一个。这不是一个简单的“只需使用这个”过程,因为 MVC 比 Web 窗体低得多,但提供了更多的灵活性和功能。有了这种灵活性和力量,您就承担了更多责任。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-22
    • 2010-12-14
    • 1970-01-01
    • 2010-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多