asp.net-mvc – 如何拦截视图渲染以在所有部分视图上添加HTML /
发布时间:2020-12-15 19:25:06 所属栏目:asp.Net 来源:网络整理
导读:我需要从一个约会驱动的位置写一个js文件的内容(如?/ ClientApp / Controllers / Home / Home.js,如果加载位于?/ Views / Home / Home.cshtml的视图).我该如何做? 示例:如果文件?/ Views / Home / Home.cshtml如下所示: div id="some-partial-view" !-- .
我需要从一个约会驱动的位置写一个js文件的内容(如?/ ClientApp / Controllers / Home / Home.js,如果加载位于?/ Views / Home / Home.cshtml的视图).我该如何做?
示例:如果文件?/ Views / Home / Home.cshtml如下所示: <div id="some-partial-view"> <!-- ... --> </div> 而文件?/ ClientApp / Controllers / Home / Home.Controller.js看起来像 function HomeController() { //some code } 然后Web服务器返回的渲染视图应该是(如果使用fiddler) <!--ommitted <html> <body> tags --> <div id="some-partial-view"> <!-- ... --> </div> <script type="text/javascript"> function HomeController() { //some code } </script> 一种方法是添加一个HTML助手来执行此操作,如: <div id="some-partial-view" ng:Controller="HomeController"> <!-- ... --> </div> @Html.IncludeController("HomeController") 但是,我不想在所有部分视图中重复. 有任何想法吗? 解决方法
你可以编写自定义视图:
public class MyRazorView : RazorView { public MyRazorView(ControllerContext controllerContext,string viewPath,string layoutPath,bool runViewStartPages,IEnumerable<string> viewStartFileExtensions,IViewPageActivator viewPageActivator) : base(controllerContext,viewPath,layoutPath,runViewStartPages,viewStartFileExtensions,viewPageActivator) { } protected override void RenderView(ViewContext viewContext,TextWriter writer,object instance) { base.RenderView(viewContext,writer,instance); var view = (BuildManagerCompiledView)viewContext.View; var context = viewContext.HttpContext; var path = context.Server.MapPath(view.ViewPath); var viewName = Path.GetFileNameWithoutExtension(path); var controller = viewContext.RouteData.GetRequiredString("controller"); var js = context.Server.MapPath( string.Format( "~/ClientApp/Controllers/{0}/{0}.{1}.js",viewName,controller ) ); if (File.Exists(js)) { writer.WriteLine( string.Format( "<script type="text/javascript">{0}</script>",File.ReadAllText(js) ) ); } } } 以及一个自定义视图引擎,当要求部分视图时,它将返回此自定义视图: public class MyRazorViewEngine : RazorViewEngine { protected override IView CreatePartialView(ControllerContext controllerContext,string partialPath) { return new MyRazorView( controllerContext,partialPath,null,false,base.FileExtensions,base.ViewPageActivator ); } } 这将在Application_Start中注册: protected void Application_Start() { AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); ViewEngines.Engines.Clear(); ViewEngines.Engines.Add(new MyRazorViewEngine()); } 您可能需要调整一些路径,因为在您的问题中,js所在的位置不太清楚,但通常您应该在答案中有足够的详细信息. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – 为不同项目中的所有Web应用程序网页添加命名空间
- asp.net-mvc-3 – ASP.NET MVC 3 Razor查看onclick编码
- asp.net – LINQ:列表中唯一项目的计数
- asp.net – 在几个网页(.cshtml文件)中使用Razor @function
- asp.net-mvc – ASP.NET MVC JavaScript路由
- asp.net – 简单LINQ和列表错误:WhereListIterator`1 [任务
- asp.net – 在.net 3.5中使用两个值绑定下拉列表
- asp.net-mvc – asp.net mvc局部视图错误输出
- asp.net-mvc – 将CSS添加到视图或部分视图
- asp.net核心 – 在Visual Sudio 2015中的Aurelia项目设置和
推荐文章
站长推荐
- asp.net – aspnet_regiis -ga的对面
- asp.net – 无法为’localhost’生成绑定重定向.
- 处理asp:ScriptManager时,mscorlib.dll中的asp.
- asp.net – 如何将新的Web应用程序部署到IIS站点
- asp.net-mvc – 如何创建ASP.NET MVC区域作为插件
- asp.net – 由TaskScheduler和SynchronizationCo
- 折腾词库,一个词库互转程序
- asp.net-web-api – 刷新令牌 – 服务器端存储和
- asp.net-mvc-3 – ASP.NET MVC注入Http / Reques
- asp.net-mvc-3 – 在仅HTTPS站点上对HTTP HEAD请
热点阅读