在.NET MVC局部视图中,我想做类似的事情:
<% ScriptCollection.RequireScript("path/to/script.js"); %>
这需要ScriptCollection
对象中的方法如下所示:
public void RequireScript(string src)
{
if (!_List.Contains(src))
_List.Add(src);
}
然后,在我的母版页面中,我会有这样的事情:
<html>
<head></head>
<body>
<!-- Content would go here -->
<% foreach (var script in ScriptCollection) { %>
<script type="text/javascript" src="<%= script %>"></script>
<% } %>
</body>
</html>
我的问题是:
如何使ScriptCollection
对象可以通过部分视图更新,也可以由主页面使用?
编辑: 我不想在控制器中添加所需的脚本,也不想使用强类型的母版页。虽然这些方法被认为是最佳实践,但欢迎这样做的建议。
编辑#2:
这对于扩展属性来说很容易。我可以给HtmlHelper
类ScriptCollection
属性。我是否遗漏了已存在的类似内容?
答案 0 :(得分:1)
我检查了Telerik组件。他们对我的需求有点过分。此外,开源许可证(GPL v2)不是我正在寻找的类型。
我启动了一个根据麻省理工学院开源许可证授权的项目,并将其托管在Google Code上。这是解决我问题的轻量级解决方案。
答案 1 :(得分:0)
您可以查看Telerik的ScriptRegisterBuilder类实现,它可以完全满足您的需求。或者你也可以使用它。此外,它还支持:
现在,即使您不使用Telerik提供的任何其他内容,您也可以使用ScriptRegisterBuilder
类,但建议您禁用自动jquery&amp; jquery验证脚本注册。另见提供的链接。
另请查看StyleSheetRegistrarBuilder
课程。这是ScriptRegisterBuilder
类的侄子并处理CSS资产。
我在你的问题中注意到了MVC2标签,但我的简单例子使用了剃刀,只是为了说明问题。使它适用于MVC2 / ASPX应该不难。否则请告诉我。
大师
@using Telerik.Web.Mvc.UI
<!DOCTYPE html>
<html>
<head>
<title>@ViewBag.Title</title>
@Html.Telerik().StyleSheetRegistrar().DefaultGroup(group => group.Add("~/Content/Site.css"))
</head>
<body>
@RenderBody()
@Html.Telerik().ScriptRegistrar().jQuery(false).jQueryValidation(false)
</body>
</html>
部分视图
@using Telerik.Web.Mvc.UI
@{
ViewBag.Title = "Home Page";
Html.Telerik().StyleSheetRegistrar().DefaultGroup(group => group.Add("~/Content/Site2.css"));
Html.Telerik().ScriptRegistrar().DefaultGroup(group => group.Add("~/Scripts/Test.js"));
}
<h2>@ViewBag.Title</h2>
<p>
Bla bla bla
</p>