我有一個內嵌JavaScript的ASP.NET MVC應用程序,它只適用於特定的視圖。將JavaScript用於視圖的外部化
如果我把所有的JavaScript主要佈局網頁時,收到錯誤消息的所有網頁上存在不ID。
是否有一種方法可以將每個視圖的JavaScript外部化?
我有一個內嵌JavaScript的ASP.NET MVC應用程序,它只適用於特定的視圖。將JavaScript用於視圖的外部化
如果我把所有的JavaScript主要佈局網頁時,收到錯誤消息的所有網頁上存在不ID。
是否有一種方法可以將每個視圖的JavaScript外部化?
如果您使用的是MVC 2,則可以使用內容佔位符。
// this goes in your master page in your head tag
<asp:ContentPlaceHolder id="Script" runat="server"/>
// this goes in your view -- not partial
<asp:Content ID="Content1" ContentPlaceHolderID="script" runat="server">
<script type="text/javascript" src="foo.js"></script>
</asp:Content>
在MVC 3中,您可以做this。
這是一種方法。在你佈局頁面之間的head標籤創建節
<head>
@RenderSection("Head", required: false);
</head>
然後在視圖中創建一個部分,並把你的腳本標籤呢?這是使用Razor視圖引擎
。
@section Head
{
<script type="text/javascript">
do some java script...
</script>
}
你也可以參考特定於該頁面外部庫,如燈箱或東西。
JavaScript可以測試'ID'是否爲空或未定義,如果是,則不觸發代碼。
我使用HtmlHelper擴展在每個控制器上註冊我的使用腳本 - 「動作」和「MasterPage」使用正確的腳本標記呈現每個註冊的腳本。
的HtmlHelper:
public static void RegisterScript(string path)
{
if (!HttpContext.Current.Items.Contains("RegisteredScripts"))
HttpContext.Current.Items.Add("RegisteredScripts", ";" + path);
else
HttpContext.Current.Items["RegisteredScripts"] = ";" + path;
}
public static MvcHtmlString RegisteredScripts(this HtmlHelper html)
{
var lines = new StringBuilder();
if (html.ViewContext.HttpContext.Items.Contains("RegisteredScripts"))
{
foreach (var k in html.ViewContext.HttpContext.Items["RegisteredScripts"].ToString().Substring(1).Split(';'))
{
lines.Append(html.Script(k));
}
}
return MvcHtmlString.Create(lines.ToString());
}
// Helper-functions
public static MvcHtmlString Script(this HtmlHelper html, string path)
{
if (!ExistsInContext(html, path))
{
return Render(html, "<script type=\"text/javascript\" src=\"{0}\"></script>", path);
}
return MvcHtmlString.Create("");
}
private static bool ExistsInContext(HtmlHelper html, string path)
{
return html.ViewContext.HttpContext.Items.Contains(path);
}
在控制器動作只要致電:
Helpers.HtmlHelpers.RegisterScript("~/Scripts/custom.js");
希望這有助於
下面的答案是正確的。但爲了完整性還有另一種選擇 - 在你的Javascript中檢查ID是否爲空。 – Daveo