【问题标题】:ASP MVC 5 - Partial View File Outside of Views FolderASP MVC 5 - 视图文件夹外的部分视图文件
【发布时间】:2018-04-09 22:04:20
【问题描述】:

我有一个部分视图文件,它接收保存在视图目录之外的@model - 实际上存储在 app_data 中。

但是我得到错误:

The name 'model' does not exist in the current context
Source File: ...\app_data\_DefaultLayout.cshtml

下面是我的代码:

 @Html.Partial("~/app_data/_DefaultLayout.cshtml"), Model)

默认布局如下:

 @using System.Web.Mvc
 @using System.Web.Mvc.Html
 @model MyApp.ViewModels.CreateCaseViewModel

 // some html and razor code

【问题讨论】:

    标签: asp.net asp.net-mvc asp.net-mvc-4 razor


    【解决方案1】:

    此异常是 cshtml 文件的编译错误。视图无权访问模型类型。如果您检查解决方案资源管理器,则有两个 web.config 文件,一个位于 Views 文件夹中,一个位于根级别。

    对其进行排序的一种方法是将 Views/web.config 复制到 App_Data 中。

    【讨论】:

      【解决方案2】:

      App_Data 是 ASP.NET 中的一个特殊目录,它应该像 XML 文件 / mdf 文件一样存储数据文件来存储数据。它也有访问限制。

      您不应该在该文件夹中放置任何 UI 层关注点(视图)。 Asp.NET MVC 对您的 UI 层有一个约定,即~/Views 目录。因此,请使用该位置来保留您的视图。

      如果绝对需要,您可以将视图文件放在应用程序中的几乎任何位置(除了那些系统目录),例如,您可以创建一个名为 MyPartialViews 的目录并将您的部分视图放在那里并参考完整路径那。要记住的重要一点是,您需要在该文件夹中有一个网络配置(从~/Views 复制一个并将其放在那里)。 Web 配置有许多需要的元素,包括所有视图的 pageBaseType

      【讨论】:

      • 是的,我知道这个约定。但是,我需要允许用户上传布局文件,并且出于明显的安全原因,我无法授予他们在视图文件夹中执行此操作的权限。
      • 您不应该允许用户上传布局文件。如果他们上传一些文件,其中包含一些用于递归循环的 C# 代码怎么办?如果它有代码从您的应用程序根目录读取文件并将其显示在 ui 中怎么办?代码在服务器中执行,人们可能会误用它。这是一个安全问题。如果您只关心 html 标记/样式,则应该考虑使用编辑器 ui 之类的东西,他们可以在其中编辑页面(如富文本编辑器),以便将该标记存储在表中并根据需要呈现(如博客)
      • 我需要他们能够布局一个表单,其中表单的结构存储为 xml 或 json。使用 razor 比 xslt 容易得多,这就是我使用 razor 存储布局的原因。另一种选择是使用 xslt 构建表单,并允许用户上传和 xslt 文件来布局他们的表单。
      • xslt 会更安全吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-03-22
      • 2010-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多