我有小块的javascript块.我希望这些相同的块在我的代码中显示为内联,但不希望在每个文件中重复它们.有没有办法可以将代码"包含"到不涉及的Razor文件中
<script src="@Url.Content("~/Scripts/small_script_block1.js")" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)
谢谢
另一种可能性需要我多花几分钟才能写出来:
为HtmlHelper创建扩展方法.在你的cshtml文件中,它看起来像这样:
@Html.InlineScriptBlock("~/scripts/small_script_block1.js")
Run Code Online (Sandbox Code Playgroud)
如果您愿意,我可以向您发送实施,但这个想法可能就是您所需要的.如果没有,请添加评论,我会写出来.
编辑代码下面(不漂亮,没有暗示或给出的保证:)
public static class HtmlHelperExtensions
{
public static MvcHtmlString InlineScriptBlock<TModel>(this HtmlHelper<TModel> htmlHelper, string path)
{
var builder = new TagBuilder("script");
builder.Attributes.Add("type", "text/javascript");
var physicalPath = htmlHelper.ViewContext.RequestContext.HttpContext.Server.MapPath(path);
if (File.Exists(physicalPath))
{
builder.InnerHtml = File.ReadAllText(physicalPath);
}
return MvcHtmlString.Create(builder.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
请记住,如果将其放入项目中,则需要使命名空间对视图可见.与可以在顶部提供标记的ASP.NET WebForms不同,Razor要求您在Views文件夹中的Web.config文件中执行此操作.
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="Your.Namespace.Here.Extensions" />
</namespaces>
</pages>
Run Code Online (Sandbox Code Playgroud)
您可以使用@RenderSection语法.
<head>
@RenderSection( "JavaScript", optional : true)
</head>
Run Code Online (Sandbox Code Playgroud)
在身体的某个地方,添加..
@section JavaScript
{
<script src="/Scripts/script.js" type="text/javascript"></script>
}
Run Code Online (Sandbox Code Playgroud)
编辑:或者如果你更喜欢内联,那么如下:
@section JavaScript
{
<script type="text/javascript">
function doSomething() {
}
</script>
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13740 次 |
| 最近记录: |