asp.net-mvc – 如何拦截视图渲染以在所有部分视图上添加HTML / JS?
发布时间:2020-05-23 04:56:18 所属栏目: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 MVC授权操作过滤器
- 从ASP.NET MVC应用程序中的Amazon SES发送电子邮件
- asp.net – 多租户,或不是多租户
- asp.net-mvc-3 – 在MVC中设置403错误页面
- asp.net-mvc – ASP.NET MVC Json DateTime序列化转换为UTC
- asp.net-mvc-3 – 允许没有找到Html属性[AllowHtml]
- 利用ASP.NET MVC和Bootstrap快速搭建个人博客之后台dataTab
- Asp.Net Web Api基于令牌的授权,没有OWIN和AspNet.Identity
- asp.net-mvc – 我们是否正在使用.Net 3.5中的MVC框架转向经
- asp.net – 从Web页面录制音频
推荐文章
站长推荐
- asp.net-mvc – 传统的ASP.NET Web窗体与MVC
- asp.net – 动态设置超链接控件的navigationurl属
- asp.net-mvc – 有没有办法让RoutePrefix以可选参
- asp.net-mvc-2 – MVC源代码单例模式
- asp.net-mvc – 使用MVC和ASP.Net Core重写动态U
- .net – Cache.Add绝对到期 – 是否基于UTC?
- .net – RegularExpressionValidator使用除Regex
- asp.net-mvc – 使用与本地化更改冲突的自定义数
- asp.net – 在web-farm网站上将machineKey添加到
- asp.net – 允许 – (破折号)在正则表达式中
热点阅读
