close

 

      許多程式開發者對於從主頁或內容中呼叫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

若有任何侵權或是指教敬請不吝告知,謝謝^_^

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Iris 的頭像
    Iris

    Estelle

    Iris 發表在 痞客邦 留言(2) 人氣()