許多程式開發者對於從主頁或內容中呼叫JavaScript感到非常的困惑,因此在這篇文章中,我們會看到從主頁或內容頁裡呼叫JavaScript時一些常見的問題以及它們的解決方案。
這篇文章是兩篇系列文章的第一部分,此部份將用於探討在主頁(master pages)的JavaScript,下一篇文章會探討到在內容頁(content Pages)的JavaScript。
補充: 這篇文章的第二部分可以在這裡閱讀Calling JavaScript from ASP.NET Master Page and Content Pages-Part II
在主頁呼叫JavaScript
你可以在主要頁面呼叫一個已存在的JavaScript函式,也可以創造一個新的;這裡有一些常見的腳本。
1. 創造一個新的JavaScript函式,並且以主頁的Page_Load()事件呼叫之。
C#
protected void Page_Load(object sender, EventArgs e)
{
string someScript = "";
someScript = "<script language='javascript'>alert('Called from CodeBehind');</script>";
Page.ClientScript.RegisterStartupScript(this.GetType(), "onload", someScript);
}
VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Dim someScript As String = ""
someScript = "<script language='javascript'>alert('Called from CodeBehind');</script>"
Page.ClientScript.RegisterStartupScript(Me.GetType(), "onload", someScript)
End Sub
Page.ClientScript.RegisterStartupScript() 讓你可以在使用者端原始碼背後發出腳本,若需要更多的資訊可以參考此連結: http://msdn.microsoft.com/en-us/library/system.web.ui.clientscriptmanager.registerstartupscript.aspx
2. 使用Page_Load() 事件來呼叫已存在於主要頁面的JavaScript。
假設你已宣告一個JavaScript函式在主要頁面的<head>標籤之內,那麼這裡將會告訴你如何使用Page_Load()來呼叫這個函式。
<head runat="server">
<title></title>
<script type="text/javascript">
function invokeMeMaster() {
alert('I was invoked from Master');
}
</script>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
C#
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.ClientScript.IsStartupScriptRegistered("alert"))
{
Page.ClientScript.RegisterStartupScript
(this.GetType(), "alert", "invokeMeMaster();", true);
}
}
VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
If (Not Page.ClientScript.IsStartupScriptRegistered("alert")) Then
Page.ClientScript.RegisterStartupScript(Me.GetType(), "alert", "invokeMeMaster();", True)
End If
End Sub
3. 從主要頁面的button click呼叫JavaScript函式。
<head runat="server">
<title></title>
<script type="text/javascript">
function invokeMeMaster() {
alert('I was invoked from Masterdotnetcurry');
}
</script>
<asp:ContentPlaceHolder id="head" runat="server">
</asp:ContentPlaceHolder>
</head>
接著我們在<body>標籤裡增加一個button,並利用onClientClick去呼叫這個函式。
<asp:Button ID="btnMaster" runat="server" Text="Button" OnClientClick="return invokeMeMaster();"/>
onClientClick()會在postback出現之前被呼叫,這好讓我們可以檢查出並取消提交一些不符合條件的情況。我們將會在Tip 6看到有關於這個的範例。
4. 在主要頁面使用JavaScript來存取控制。
如果你在主要頁面需要使用JavaScript來存取一項控制,這裡將會告訴你要如何實行。在這個範例中,我們將會檢查一個TextBox的字元長度若超過五個字母,則這項表單將會被取消提交。
如下所示,在ContentPlaceHolder以外主要頁面增加一個TextBox和一個Button。
<body>
<form id="form1" runat="server">
<div>
<asp:Panel ID="panelMaster" GroupingText="MasterPage controls" runat="server">
<asp:TextBox ID="txtMaster" runat="server"></asp:TextBox>
<asp:Button ID="btnMaster" runat="server" Text="Button" OnClientClick="return accessMasterControl();"/>
<br />
</asp:Panel>
<asp:ContentPlaceHolder id="ContentPlaceHolder1" runat="server">
</asp:ContentPlaceHolder>
</div>
原文來源: http://www.dotnetcurry.com/ShowArticle.aspx?ID=273
這些是在練習過程參考過的文章,順便練習把它翻成中文:p
若有任何侵權或是指教敬請不吝告知,謝謝^_^
留言列表