如何以編程方式將Javascript文件添加到用戶控件?在.net中以編程方式向用戶控件添加Javascript文件
我想讓用戶控件成爲一個完整的包 - 也就是說,我不想在用戶控件的頁面上添加與用戶控件相關的JavaScript,當我可以在控件本身內部進行操作時。
由於用戶控件中沒有頁面對象,你會怎麼做?
如何以編程方式將Javascript文件添加到用戶控件?在.net中以編程方式向用戶控件添加Javascript文件
我想讓用戶控件成爲一個完整的包 - 也就是說,我不想在用戶控件的頁面上添加與用戶控件相關的JavaScript,當我可以在控件本身內部進行操作時。
由於用戶控件中沒有頁面對象,你會怎麼做?
在control.ascx.cs文件的Page_Load方法:
LiteralControl jsResource = new LiteralControl();
jsResource.Text = "<script type=\"text/javascript\" src=\"js/mini-template-control.js\"></script>";
Page.Header.Controls.Add(jsResource);
HtmlLink stylesLink = new HtmlLink();
stylesLink.Attributes["rel"] = "stylesheet";
stylesLink.Attributes["type"] = "text/css";
stylesLink.Href = "css/mini-template-control.css";
Page.Header.Controls.Add(stylesLink);
這將加載css和Javascript插入到主頁面的head標籤中,只要確保頭部有runat =「server」即可。
我通常在爲控件呈現HTML時根據它是庫注入還是實例注入來執行操作,我使用Items集合來指定是否已經爲此類型的控件生成代碼當前請求使用唯一標識符。
某事的效果:
protected override void Render(HtmlTextWriter writer)
{
base.Render(writer);
//Check if the Object Script has already been rendered during this request.
if (!Context.Items.Contains("xxx"))
{
//Specify that the Object Script has been rendered during this request.
Context.Items.Add("xxx", string.Empty);
//Write the script to the page via the control
writer.Write([libraryinjection]);
}
//Write the script that instantiates a new instance for this control
writer.Write([instanceinjection]);
}
可以客戶端腳本包括使用ClientScriptManager註冊。通過Control.Page屬性可以訪問頁面 。
Page.ClientScript.RegisterClientScriptInclude (
typeof (MyControl), "includeme.js", "js/includeme.js" );
編輯:對不起,共計「完整的軟件包」,它可以使用腳本作爲嵌入式資源, 和AQUIRE動態URL的通過WebResource.axd處理。 如果這不被認爲是完全的,那麼我想它可以放在App_LocalResources中,但它永遠不會只是一個文件, ,除非代碼和腳本是內聯的。
用戶特別提到他希望他的整個控制是一個「完整的包」。該解決方案假設控件是與_with_ javascript文件一起添加的,該文件不是完整的包。 – 2009-02-06 19:00:57
如果您的.CS文件中包含實際javascript的文本,則可以調用Page.ClientScript.RegisterClientScriptBlock。
以下假設「GetScript()」返回實際的您要添加到呈現的控件的javascript。
Page.ClientScript.RegisterClientScriptBlock(GetType(), "controlScriptName", GetScript());
好問題!
UserControl應該是一個單獨的包,而不依賴於JavaScript或CSS文件。您需要將JS和CSS文件作爲嵌入式資源。右鍵單擊屬性並將生成操作設置爲嵌入資源。然後,您需要將JavaScript和CSS文件作爲WebResources注入。
這裏是一個文章,我昨天寫了談到了同樣的情景:
http://highoncoding.com/Articles/502_Creating_RadioButton_Validation_Using_Custom_Validator.aspx
同爲gnomixa的迴應,只有一點點清潔:
HtmlGenericControl js = new HtmlGenericControl("script");
js.Attributes["type"] = "text/javascript";
js.Attributes["src"] = "jscript/formfunctions.js";
Page.Header.Controls.Add(js);
從http://www.aspdotnetfaq.com/Faq/How-to-Programmatically-add-JavaScript-File-to-Asp-Net-page.aspx
在我的地盤我將所有需要的腳本和樣式佔位
<asp:placeHolder runat="Server" ID="phHead">
<script src="/header/widget/script.js" type="text/javascript"></script>
<link href="/header/widget/style.css" rel="stylesheet" type="text/css" />
</asp:placeHolder>
和
Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Page.Header.Controls.Add(phHead)
End Sub
我發現這是一個更優雅的方式來修復鏈接到您的JavaScript。
在你的.ascx,鏈接到你的腳本文件的方式如下:
<script src='<%= ResolveClientUrl("~/Scripts/jquery-1.7.1.min.js") %>' type="text/javascript"></script>
<script src='<%= ResolveClientUrl("~/Scripts/jquery.maskedinput-1.3.min.js") %>' type="text/javascript"></script>
這樣一來,無論你把你的用戶控件,鏈接到你的腳本能正確地解決其子文件夾/頁。
我假設這是在.ascx.cs文件內完成的? – sarsnake 2009-02-06 19:06:49
它可以在ascx.cs級別完成,或者如果控件是庫中代碼級別的純代碼。 – 2009-02-06 19:14:38
哦好吧,whats [libraryinjection]?原諒我,我從來沒有見過這個:) 和你是什麼意思的xxx?有點像myscript.js? – sarsnake 2009-02-06 19:25:43