Asp.net mvc 3 如何在ASP.NET MVC 3中组合静态视图和动态视图
这是一个很难问的问题,没有一些背景知识,我试图做什么。我正在开发一个现有的多租户ASP.NET MVC 3应用程序(典型的数据表单应用程序),但现在必须为租户提供向任何页面添加自定义字段的功能。所有租户都有一组固定的页面,但他们可以在其中一个页面的任何位置添加字段。例如,在用户配置文件页面上,如果有字段可以输入您的地址,则租户可能希望在国家/地区字段之前添加县字段 每个租户的自定义字段配置存储在一个数据库中,该数据库包含描述字段内容(文本框、选择等)以及应呈现在何处的信息,如路径和应插入的字段id 由于这是一个现有的应用程序,我有一些限制,希望保留所有现有的.cshtml视图作为所有租户的默认/基本视图。为了将特定于租户的字段添加到页面中,我创建了一个自定义VirtualPathProvider,它:Asp.net mvc 3 如何在ASP.NET MVC 3中组合静态视图和动态视图,asp.net-mvc-3,Asp.net Mvc 3,这是一个很难问的问题,没有一些背景知识,我试图做什么。我正在开发一个现有的多租户ASP.NET MVC 3应用程序(典型的数据表单应用程序),但现在必须为租户提供向任何页面添加自定义字段的功能。所有租户都有一组固定的页面,但他们可以在其中一个页面的任何位置添加字段。例如,在用户配置文件页面上,如果有字段可以输入您的地址,则租户可能希望在国家/地区字段之前添加县字段 每个租户的自定义字段配置存储在一个数据库中,该数据库包含描述字段内容(文本框、选择等)以及应呈现在何处的信息,如路径和应插入的字段i
最后是问题。如何覆盖编译和缓存,以便包含租户id之类的内容,以便每个租户缓存一次每个视图?我发现可以覆盖VirtualPathProviders的GetCacheKey方法来实现自己的密钥模式。在我的例子中,将租户的密钥添加到缓存密钥的末尾,如下所示:
public override string GetCacheKey(string virtualPath)
{
var tenantKey = getTenantKey();
if (VirtualPathHelper.SupportsCustomFields(virtualPath))
{
return string.Join("_", virtualPath, tenantKey);
}
return base.GetCacheKey(virtualPath);
}
在ASP.NET Internet临时文件目录中,该视图的文件名为:
_视图_home_index.cshtml_a7c1a66a-ebe4-4ca2-8dc4-7a22b460f368.cshtml
请求查看的每个租户现在都将获得自己的版本