2017-10-28 123 views
1

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

但是我得到错误:

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 

回答

2

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

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

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

+0

是的我知道那个约​​定。不过,我需要允许用户上传布局文件,并且我无法授予他们在视图文件夹内执行此操作的权限,这是出于明显的安全原因。 – adam78

+0

你不应该让用户上传布局文件。如果他们上传一些文件,其中有一些C#代码递归循环呢?如果它有代码从您的应用程序根目录读取文件并将其显示在ui中,该怎么办?代码在服务器中执行,人们可能会错误地使用它。这是一个安全问题。如果你关心的只是html标记/样式,你应该考虑一些类似编辑器的UI,他们可以编辑页面(如富文本编辑器),以便将该标记存储在表中并根据需要呈现它(如博客) – Shyju

+0

我需要他们能够布局表单的结构存储为xml或json。使用剃刀比xslt容易得多,这就是为什么我要使用剃刀存储布局。另一种选择是使用xslt构建表单并允许用户上传和xslt文件来布局表单。 – adam78

2

这个例外是在CSHTML编译错误文件。该视图无法访问模型类型。如果您检查解决方案资源管理器,则有两个web.config文件,一个位于Views文件夹中,另一个位于根目录级别。

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