1

C#とRazorにASP.NETMVC3アプリケーションがあります。

_Layout.cshtmlVS2010のMVC3アプリケーションテンプレートの標準を使用しています。Partial ViewがレンダリングされたときにJavascriptコードを自分の1つに追加しView、Javascriptをに直接アタッチしたくありません_Layout

Viewはこのように見えます:

@model MyNameSpace.ViewModels.MyViewModel

@{
    ViewBag.Title = "Home Page";
}

<h2>@ViewBag.Message</h2>

@using (Html.BeginForm()) {
    @Html.ValidationSummary(true)
    <fieldset>
        <legend>Filters</legend>

        @{ Html.RenderPartial("Filters", Model.Filters);  }

        <p>
            <input type="submit" value="Submit" />
        </p>

    </fieldset>
}

そして、私のようにPartial View Filters.cshtml見えます:

@model MyNameSpace.ViewModels.FiltersViewModel

<p>
@Html.DropDownListFor(
    x => x.Type, 
    new SelectList(Model.Types, "Value", "Text"),
    "-- select type --"
)
</p>

<p>
@Html.DropDownListFor(
    x => x.Category, 
    new SelectList(Model.Categories, "Value", "Text"),
    "-- select category --"
)</p>

<script type="text/javascript">
   //Some Javascript
</script>

このままにしておくViewと、Javascriptが内部にレンダリングされ、<body>非常に見苦しくなります。<head>_LayoutのセクションにJavascriptを直接追加できますが、それは私が望むものではありません。どうすれば目的を達成できますか?

4

1 に答える 1

5

@RenderSection("HeadContent", required: false)メインレイアウト(マスターページ)内に追加してから、次のようなものを追加します

    @section HeadContent {
        <link href="@Url.Content("~/Content/styles/admin.css")" rel="stylesheet" type="text/css" />
        <script src="@Url.Content("~/Scripts/jquery-1.4.4.min.js")" type="text/javascript"></script>    
    } 

あなたの部分的な見方で

razor が html ページをコンパイルするとき、@section ブロックのコンテンツを部分ビューから、レイアウト (masterpage) 上の @RenderSection("HeadContent", required: false) を配置する場所に配置します。部分ビューに @section ブロックがない場合、何も追加されません。

于 2012-12-14T11:42:56.667 に答える