有没有等同于Page.ClientScripts.RegisterClientScriptInclude和Page.ClientScripts.RegisterClientScriptBlock的MVC?
我正在寻找创建部分视图,可以很好地从同一主视图引用多次。
这些视图可能有自己的脚本要求,但在每个潜在的主视图或母版页上编写包含似乎是浪费。
另外,我觉得让局部视图调用某个javascript一次来初始化它的所有同级视图是很明智的。
例如..。
$('input[alt=date]').datepicker();...is,我应该只需要调用一次,但前提是局部视图在视图中放置了这样的hmtl控件。
我想知道如何在ASP.Net MVC框架中实现旧的Page.ClientScripts.RegisterClientScriptInclude和Page.ClientScripts.RegisterClientScriptBlock功能
发布于 2010-09-03 04:01:56
你可以使用Spark view engine,它有"once“属性。例如。
<content name="MasterPageHead">
<script once="CustomScriptUniqueIdName" ... />
</content>当在视图或局部视图中使用时,脚本(或者这可以是任何其他标签,例如div)将只在名为MasterPageHead的母版页部分中包含一次(您可以将其放在其中)。
不确定这是否对您有帮助,但是您要求的是MVC解决方案,而不是WebForms解决方案。
发布于 2009-11-13 02:40:14
我已经用HtmlHelper Html.RegisterJavascript( string )上的一个扩展方法做到了这一点。我在ViewData字典中创建了一个键"____javascript____“。这保存了javascript条目的字典,这些条目是从javascript摘要中键控出来的(以防止重复)。
问题是这些注册是在头部处理之后进行的,所以脚本标记必须放在文件的末尾。在主体结束标记之前,我调用了Html.RenderJavascript(); (我的方法)。
我找不到更好的方法,但我必须想象一个更聪明的解决方案是可能的。
发布于 2014-01-16 16:10:05
1-添加扩展方法类
public static class Extentions
{
public static void AddRegisterClientsSript(this HtmlHelper helper, string key, string script)
{
Dictionary<string, string> scripts;
if (helper.ViewBag.RegisterClientsSript != null)
{
scripts = (Dictionary<string, string>)helper.ViewBag.RegisterClientsSript;
}
else
{
scripts = new Dictionary<string, string>();
helper.ViewBag.RegisterClientsSript = scripts;
}
if (!scripts.ContainsKey(key))
{
scripts.Add(key, script);
}
}
public static MvcHtmlString RegisterClientsSript(this HtmlHelper helper)
{
var outScripts = new StringBuilder();
if (helper.ViewBag.RegisterClientsSript != null)
{
var scripts = (Dictionary<string, string>)helper.ViewBag.RegisterClientsSript;
foreach (string script in scripts.Values)
{
outScripts.AppendLine(script);
}
}
return MvcHtmlString.Create(outScripts.ToString());
}
public static MvcHtmlString Paging(this HtmlHelper helper, string uniqId)
{
helper.AddRegisterClientsSript("jquerypaginatecss", @"<link href=""/Content/Paginate/jquery.paginate.css"" rel=""stylesheet"" />");
helper.AddRegisterClientsSript("jquerypaginatejs", @"<script src=""/Content/Paginate/jquery.paginate.js""></script>");
}
}2-在页面中添加命名空间并使用它
@using Mirak.Ui.Components
@section scripts{
@Html.RegisterClientsSript()
}https://stackoverflow.com/questions/1724166
复制相似问题