200分求mvc3插件应用 网上的例子都试了,只有FzySqr.com_PluginTutorial_Day3这个例子能运行成功,但换成mvc3的插件就不行了;谁能给我个主程序和插件都为mvc3项目demo,并能运行成功的例子,我给200分,拜托了~谢谢各位高手~~~~~~~ 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你自己创建 一个 MVC 的程序就好了. net自己有这个模板的, 我是的是mvc3插件的应用,不是创建mvc3项目,怎么会有模版;还有,那200分是追加给,我在这里直接给200的帖子,万一没人能解决,不是浪费了。 mvc插件?为毛不直接用微软现成的mvc4.0? 以前主项目是mvc3做的,现在要开发mvc3的插件,弄死都整不出来,求高手现身了。 http://www.cnblogs.com/Mainz/archive/2012/03/06/2382653.html 这篇文章看过了,主要思路是翻译借鉴的国外的,按照这个我做了demo,运行不成功。 高手在那里,通过反射能从插件中获得控制器的类代码编译资源,主要是获取插件视图的问题,我已经试着用RazorViewEngine,动态从虚拟文件中获取视图,但总不能成功,代码如下: public class CustomRazorViewEngine : RazorViewEngine { public CustomRazorViewEngine(string[] viewLocations) : base() { string[] tempArray = new string[ViewLocationFormats.Length + viewLocations.Length]; ViewLocationFormats.CopyTo(tempArray, 0); for (int i = 0; i < viewLocations.Length; i++) { tempArray[ViewLocationFormats.Length + i] = viewLocations[i]; } ViewLocationFormats = tempArray; PartialViewLocationFormats = ViewLocationFormats; } private bool IsAppResourcePath(string virtualPath) { String checkPath = VirtualPathUtility.ToAppRelative(virtualPath); return checkPath.StartsWith("~/Plugins/", StringComparison.InvariantCultureIgnoreCase); } protected override bool FileExists(ControllerContext controllerContext, string virtualPath) { if (IsAppResourcePath(virtualPath)) { return System.Web.Hosting.HostingEnvironment.VirtualPathProvider.FileExists(virtualPath); } else return base.FileExists(controllerContext, virtualPath); } }继承的VirtualPathProvider类 public class AssemblyResourceProvider : System.Web.Hosting.VirtualPathProvider { private bool IsAppResourcePath(string virtualPath) { String checkPath = VirtualPathUtility.ToAppRelative(virtualPath); return checkPath.StartsWith("~/Plugins/", StringComparison.InvariantCultureIgnoreCase); } public override bool FileExists(string virtualPath) { if (IsAppResourcePath(virtualPath)) { string path = VirtualPathUtility.ToAppRelative(virtualPath); string[] parts = path.Split('/'); string assemblyName = parts[2]; string resourceName = parts[3]; assemblyName = Path.Combine(HttpRuntime.BinDirectory, assemblyName); byte[] assemblyBytes = File.ReadAllBytes(assemblyName); Assembly assembly = Assembly.Load(assemblyBytes); if (assembly != null) { string[] resourceList = assembly.GetManifestResourceNames(); bool found = Array.Exists(resourceList, delegate(string r) { return r.Equals(resourceName); }); return found; } return false; } else return base.FileExists(virtualPath); } public override VirtualFile GetFile(string virtualPath) { if (IsAppResourcePath(virtualPath)) return new AssemblyResourceVirtualFile(virtualPath); else return base.GetFile(virtualPath); } public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart) { if (IsAppResourcePath(virtualPath)) { return null; } return base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart); } } JQuery的使用,急急急急!!!!!! 关于SQl语句和response.write的奇怪问题 ASP.NET视频教程地址 关于ComponentArt:Menu的使用 第一次面试失败 ·····谁能给我解释个问题 如果用一个按钮打开一个窗体但是不关闭本窗体 ajax如何访问存放在viewstate中的变量?? 操作xml文件内容? 关于在WEB中做出资源管理器样的东东! 为什么用treeview控件时读取XML文件中的节点不能是中文呀? vs2008 中LinqDataSource连接数据库问题 求正则表达式的互转(php转.net)
还有,那200分是追加给,我在这里直接给200的帖子,万一没人能解决,不是浪费了。
为毛不直接用微软现成的mvc4.0?
public class CustomRazorViewEngine : RazorViewEngine
{
public CustomRazorViewEngine(string[] viewLocations)
: base() {
string[] tempArray = new string[ViewLocationFormats.Length + viewLocations.Length];
ViewLocationFormats.CopyTo(tempArray, 0); for (int i = 0; i < viewLocations.Length; i++) {
tempArray[ViewLocationFormats.Length + i] = viewLocations[i];
} ViewLocationFormats = tempArray; PartialViewLocationFormats = ViewLocationFormats;
} private bool IsAppResourcePath(string virtualPath)
{
String checkPath = VirtualPathUtility.ToAppRelative(virtualPath);
return checkPath.StartsWith("~/Plugins/", StringComparison.InvariantCultureIgnoreCase);
} protected override bool FileExists(ControllerContext controllerContext, string virtualPath)
{
if (IsAppResourcePath(virtualPath))
{
return System.Web.Hosting.HostingEnvironment.VirtualPathProvider.FileExists(virtualPath);
}
else
return base.FileExists(controllerContext, virtualPath);
}
}
继承的VirtualPathProvider类 public class AssemblyResourceProvider : System.Web.Hosting.VirtualPathProvider
{ private bool IsAppResourcePath(string virtualPath)
{
String checkPath = VirtualPathUtility.ToAppRelative(virtualPath);
return checkPath.StartsWith("~/Plugins/", StringComparison.InvariantCultureIgnoreCase);
} public override bool FileExists(string virtualPath)
{
if (IsAppResourcePath(virtualPath))
{
string path = VirtualPathUtility.ToAppRelative(virtualPath);
string[] parts = path.Split('/');
string assemblyName = parts[2];
string resourceName = parts[3]; assemblyName = Path.Combine(HttpRuntime.BinDirectory, assemblyName);
byte[] assemblyBytes = File.ReadAllBytes(assemblyName);
Assembly assembly = Assembly.Load(assemblyBytes); if (assembly != null)
{
string[] resourceList = assembly.GetManifestResourceNames();
bool found = Array.Exists(resourceList, delegate(string r) { return r.Equals(resourceName); }); return found;
}
return false;
}
else
return base.FileExists(virtualPath);
} public override VirtualFile GetFile(string virtualPath)
{
if (IsAppResourcePath(virtualPath))
return new AssemblyResourceVirtualFile(virtualPath);
else
return base.GetFile(virtualPath);
} public override CacheDependency GetCacheDependency(string virtualPath, IEnumerable virtualPathDependencies, DateTime utcStart)
{
if (IsAppResourcePath(virtualPath))
{
return null;
}
return base.GetCacheDependency(virtualPath, virtualPathDependencies, utcStart);
}
}