2013-08-12 92 views
8

在我的共享佈局中,我希望有一個「腳本」部分,用它填充頁面功能所需的所有腳本。在局部視圖中使用部分

Layout.cshtml

<html> 
<head> 
    <title>Test</title> 
    <script src="@Url.Content("~/Scripts/jquery-2.0.3.js")" type="text/javascript"> </script> 

    @RenderSection("Scripts", required: false) 

</head> 
<body> 
    @RenderBody() 
</body> 
</html> 

所以,我的觀點加載特定的JavaScript和我想這是在「腳本」部分,它的工作。

Index.cshtml

@model PlatformaPu.Areas.Inventura.Models.Home.Index 

@section Scripts { 
    <script src="@Url.Content("~/Areas/Inventura/Scripts/Home/Index.js")" type="text/javascript"></script> 
} 

{CONTENT REMOVED FOR BREVITY} 

@section Footer { 
    @Html.Partial("~/Views/Shared/_AppSelector.cshtml", Model.AppSelector) 
} 

最後,我的觀點呈現的部分,我有這部分加載Javascript。

_AppSelector.cshtml

@model PlatformaPu.Models.Shared._AppSelector 

@section Scripts { 
    <script src="@Url.Content("~/Scripts/Shared/_AppSelector.js")" type="text/javascript"></script> 
} 

{CONTENT REMOVED FOR BREVITY} 

...這是工作 - JavaScript是呈現在 「腳本」 部分

我怎樣才能做到這一點?

回答

11

正如this question討論,這是不可能在一個局部視圖使用部分:

節不會在局部視圖的工作,這就是設計。您可以使用一些自定義助手來實現類似的行爲,但老實說,視圖的責任是包含必要的腳本,而不是部分的責任。我建議你使用主視圖的@scripts部分來做到這一點,而不是讓部分人擔心腳本。

您應該將腳本引用添加到引用部分的主視圖。

+0

我在此期間想通了這一點;然而,我想知道,如果這是一個好的設計或不... – OzrenTkalcecKrznaric

+0

你的意思是否引用在主視圖中的腳本是好設計?你爲什麼認爲它可能不是? –

+0

我的意思是引用孩子依賴需要的腳本。這可能是一個糟糕的設計。 – OzrenTkalcecKrznaric

3

這是我的第一個答案!

我一直在使用webforms多年,現在我正在處理MVC 5.有點難。

也許是錯誤的解決方案,但工程:)

在Layout.cshtml。添加第二個 「ScriptsPartial」 部分

@RenderSection("ScriptsPartial", required: false) 

在Index.cshtml,添加 「新的ViewDataDictionary(ViewData的){{ 」的ViewPage「,這}}」

@section Footer { 
    @Html.Partial("~/Views/Shared/_AppSelector.cshtml", Model.AppSelector, new ViewDataDictionary(ViewData) { { "ViewPage", this } }) 
} 

在_AppSelector。 CSHTML,刪除此

@section Scripts { 
    <script src="@Url.Content("~/Scripts/Shared/_AppSelector.js")" type="text/javascript"></script> 
} 

在_AppSelecto河CSHTML,在任何地方添加此

@{ 
    if (ViewData.ContainsKey("ViewPage")) 
    { 
     System.Web.Mvc.WebViewPage viewPage = (System.Web.Mvc.WebViewPage)ViewData["ViewPage"]; 

     viewPage.DefineSection("ScriptsPartial",() => 
     { 
      // viewPage.Write(Scripts.Render("~/AppSelector/Scripts")); // If you use a Bundle 
      viewPage.WriteLiteral("<script src=\"" + Url.Content("~/Scripts/Shared/_AppSelector.js") + "\" type=\"text/javascript\"></script>"); 
     }); 
    } 
} 

就「送」觀對PartialView(在WebForms的無父屬性怎麼樣?),並用它來添加內容到「ScriptsPartial」一節。需要

「ScriptsPartial」因爲DefineSection引發錯誤「已定義的部分:腳本」

所以,不超過一個PartialView可以使用「ScriptsPartial」節......不是那麼好解決。

最好的問候,

帕科費雷