我希望将我的所有JavaScript代码放在一个部分中;就在我的主布局页面中结束body个标记之前,只是想知道怎样做才是最好的,MVC风格.

例如,如果我创建一个使用jQuery UI的DateTime Picker的DisplayTemplate\DateTime.cshtml文件,那么我会将JavaScript直接嵌入到该模板中,但随后它将呈现在页面中间.

在我的普通视图中,我可以在主布局中使用@section JavaScript { //js here },然后使用@RenderSection("JavaScript", false),但这在显示/编辑器模板中似乎不起作用-有什么 idea 吗?

推荐答案

您可以继续使用两个辅助对象的连词:

public static class HtmlExtensions
{
    public static MvcHtmlString Script(this HtmlHelper htmlHelper, Func<object, HelperResult> template)
    {
        htmlHelper.ViewContext.HttpContext.Items["_script_" + Guid.NewGuid()] = template;
        return MvcHtmlString.Empty;
    }

    public static IHtmlString RenderScripts(this HtmlHelper htmlHelper)
    {
        foreach (object key in htmlHelper.ViewContext.HttpContext.Items.Keys)
        {
            if (key.ToString().StartsWith("_script_"))
            {
                var template = htmlHelper.ViewContext.HttpContext.Items[key] as Func<object, HelperResult>;
                if (template != null)
                {
                    htmlHelper.ViewContext.Writer.Write(template(null));
                }
            }
        }
        return MvcHtmlString.Empty;
    }
}

然后在你的_Layout.cshtml分中:

<body>
...
@Html.RenderScripts()
</body>

在某个模板的某个地方:

@Html.Script(
    @<script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>
)

Html相关问答推荐

CSS Flex行之间的空间很大

新用户登录时无法从cookie中获取当前用户信息

如何正确使用counter()、counter—increment()和counter—reset()嵌套标题?

我需要主页按钮出现在中间

有没有可能一个按钮,有焦点,然后再次点击它清除它的焦点,只是使用css?

D3.js—分组条形图—更新输入数据时出错

未知高度正在应用于前标记

我怎样才能在我的网站上制作花哨的角落

在WooCommerce单一产品页面上使产品图片库粘滞(固定)

Style=背景图像URL引用变成&;Quot;

如何在小屏幕中制作水平滚动div

`table>;的消失;tbody:nth子级(1)`HTML

CSS中的百分比高度,如何使其与父级高度相同

如何使元素具有粘性

对齐列表项内的文本,使其不在元素装饰下

从垫分页器中删除输入边框

两部分问题 - 是什么导致了这个空白?

我用 ejs 修复了一个奇怪的语法错误,我想知道问题出在哪里

我可以在标签元素中使用标题元素吗?

水平滚动框不显示所有元素