首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC + RegisterClientScriptInclude / RegisterClientScriptBlock

MVC + RegisterClientScriptInclude / RegisterClientScriptBlock
EN

Stack Overflow用户
提问于 2009-11-13 01:56:45
回答 3查看 2.3K关注 0票数 4

有没有等同于Page.ClientScripts.RegisterClientScriptInclude和Page.ClientScripts.RegisterClientScriptBlock的MVC?

我正在寻找创建部分视图,可以很好地从同一主视图引用多次。

这些视图可能有自己的脚本要求,但在每个潜在的主视图或母版页上编写包含似乎是浪费。

另外,我觉得让局部视图调用某个javascript一次来初始化它的所有同级视图是很明智的。

例如..。

代码语言:javascript
复制
$('input[alt=date]').datepicker();

...is,我应该只需要调用一次,但前提是局部视图在视图中放置了这样的hmtl控件。

我想知道如何在ASP.Net MVC框架中实现旧的Page.ClientScripts.RegisterClientScriptInclude和Page.ClientScripts.RegisterClientScriptBlock功能

EN

回答 3

Stack Overflow用户

发布于 2010-09-03 04:01:56

你可以使用Spark view engine,它有"once“属性。例如。

代码语言:javascript
复制
<content name="MasterPageHead">
  <script once="CustomScriptUniqueIdName" ... />
</content>

当在视图或局部视图中使用时,脚本(或者这可以是任何其他标签,例如div)将只在名为MasterPageHead的母版页部分中包含一次(您可以将其放在其中)。

不确定这是否对您有帮助,但是您要求的是MVC解决方案,而不是WebForms解决方案。

票数 4
EN

Stack Overflow用户

发布于 2009-11-13 02:40:14

我已经用HtmlHelper Html.RegisterJavascript( string )上的一个扩展方法做到了这一点。我在ViewData字典中创建了一个键"____javascript____“。这保存了javascript条目的字典,这些条目是从javascript摘要中键控出来的(以防止重复)。

问题是这些注册是在头部处理之后进行的,所以脚本标记必须放在文件的末尾。在主体结束标记之前,我调用了Html.RenderJavascript(); (我的方法)。

我找不到更好的方法,但我必须想象一个更聪明的解决方案是可能的。

票数 3
EN

Stack Overflow用户

发布于 2014-01-16 16:10:05

1-添加扩展方法类

代码语言:javascript
复制
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-在页面中添加命名空间并使用它

代码语言:javascript
复制
@using Mirak.Ui.Components

@section scripts{
   @Html.RegisterClientsSript()
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1724166

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档