3

MVC3では、jQueryスクリプトタグをページの下部「_Layout.vbhtml」に簡単に移動できます。

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

ただし、ASP.NET MVC3では、エディターテンプレートを使用してコントローラーを作成すると、scaffoldメカニズムにより、Create.cshtml、Delete.cshtml、Details.cshtml、Edit.cshtml、 Index.cshtmlなど...そしてそれらは強く型付けされています。

これらのビューファイル内では、スクリプトタグが内部にありますが、<body>タグの直前のページの下部にこれらのタグを追加するにはどうすればよい</body>ですか?

4

2 に答える 2

5

あなたが探しているのはセクションhttp://weblogs.asp.net/scottgu/archive/2010/12/30/asp-net-mvc-3-layouts-and-sections-with-razor.aspxです

</body>タグのすぐ上にセクションを追加します。

@RenderSection("Scripts", false)
</body>

次に、ビューで、このセクションに表示されるコンテンツを定義できます。

@section Scripts {
    <script>
        ...
    </script>
}
于 2012-11-02T15:50:13.140 に答える
4

このようなhtml拡張関数を作成できます

/// <summary>
///  This section is for adding a script to the <head> tag from a partial view (or any other place)
/// </summary>
private const string SCRIPTBLOCK_BUILDER = "_ScriptBlockBuilder_";

public static MvcHtmlString Script(this HtmlHelper htmlHelper, Func<object, HelperResult> template)
{
    htmlHelper.ViewContext.HttpContext.Items[SCRIPTBLOCK_BUILDER + 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(SCRIPTBLOCK_BUILDER))
        {
            var template = htmlHelper.ViewContext.HttpContext.Items[key] as Func<object, HelperResult>;
            if (template != null)
            {
                htmlHelper.ViewContext.Writer.Write(template(null));
            }
        }
    }
    return MvcHtmlString.Empty;
}

次に、これら2つの機能を使用できます。_Layout.cshtml@Html.RenderScripts()で、すべてのスクリプトをレンダリングする場所に配置します。

次に、すべてのスクリプトを次のようなビューでラップします

@Html.Script(
    @<script type="text/javascript">
         // Your scripts
    </script>
)
于 2012-11-02T15:52:27.947 に答える