close

Web畫面最常遇到開啟新視窗的需求。

如:開啟新視窗顯示明細畫面,修改儲存後,自動關閉新視窗,再重新整理母畫面。

 

 

 

以下介紹蘭花常寫的四種方法。程式碼僅截取與主題相關部份。

 

 

 

 

 

※ButtonOnClientClick 

在最單純的WebForm,可以利用ButtonOnClientClick呼叫JavaScript,開啟新視窗。

 

所謂最單純,表示user的需求通常都會把你的系統搞得很不單純,導致你不能使用這個簡便的方法。

因為最單純,所以最夢幻

 

 

 

Client Side 

<head runat="server">

    <title>未命名頁面</title>

    <script language="javascript" type="text/javascript">

      function OpenWin() {

        window.open('TestOpenWin.aspx', '_blank');

      }

    </script>

  </head>

  <body>

    <form id="form1" runat="server">

      <asp:ScriptManager ID="ScriptManager1" runat="server"/>

      <div>

        <asp:Button ID="Button2" runat="server" Text="開啟" OnClientClick="OpenWin(); return false;"/>

      </div>

    </form>

</body>

2010060901ASP .NET:開啟新視窗四部曲 

 

 

 

 

 

※ButtonOnClick 

我們通常遇到的新視窗,都是動態的畫面,而非固定單一的畫面,時常需要去後端查個資料庫、做個判斷,再開啟相對應的畫面。

這些無法在Client Side的程式做到。

 

很多人會勸你,「用HyperLink嘛!」

『乾!在我整齊劃一的Button裡,為什麼就要硬生生擠一個異父異母的HyperLink?』

 

我也曾經在想不出新方法時,用過HyperLink動態指定它的NavigateUrl,再把它的Style調成很像Button,但還是一看就知道整容過啊!(放聲大哭)

 

後來,我終於找到一個替代寫法,一整個就是能拿它招搖撞騙的搖擺貌。

 

 

 

Client Side 

<head runat="server">

    <title>未命名頁面</title>

  </head>

  <body>

    <form id="form1" runat="server">

      <div>

        <asp:Button ID="Button2" runat="server" Text="開啟"/>

      </div>

    </form>

</body> 

 

 

 

Server Side 

Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click

    Dim lJScript As New System.Text.StringBuilder("")

 

    lJScript.Append("window.open('TestOpenWin.aspx', '_blank', 'height=200,width=400,status=yes,toolbar=no,menubar=no,location=no');" & vbCrLf)

    Me.Page.ClientScript.RegisterStartupScript(Me.GetType(), "ReturnValue", lJScript.ToString(), True)

End Sub 

 

 

 

 

 

※HyperLinkNavigateUrl

你上面都給人家HyperLink嫌成這樣,叫HyperLink怎麼見人啊!

 

是說,除了圓胖胖的Button,您也可以有HyperLink的另類選擇喔!

至於如何動態指定網址,相信冰雪聰明如您一定可以舉一反三……

 

 

 

Client Side 

<head runat="server">

    <title>未命名頁面</title>

  </head>

  <body>

    <form id="form1" runat="server">

      <div>

        <asp:Button ID="Button2" runat="server" Text="開啟"/><br/>

        <asp:HyperLink ID="HyperLink1" runat="server" Target="_blank">開啟</asp:HyperLink>

      </div>

    </form>

</body>

 

 

 

Server Side 

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

    Me.HyperLink1.NavigateUrl = "TestOpenWin.aspx"

  End Sub

 2010060903ASP .NET:開啟新視窗四部曲 

 

 

 

 

 

※TelerikRadWindow

Telerik的元件是要收費的,不過我安裝過試用版的結果,到期時它也不會讓你的功能不能動,頂多在開發端的Web畫面會一直秀出「到期請付錢!」的訊息,一般使用者端並不影響。所以我就還是皮皮的繼續測試用。

 

我們公司的大專案都是使用正版軟體喔!(一定要嚴正聲明)

 

Telerik的元件不是我在說,好用又美觀,對程式開發人員而言,是個很容易上手的工具。

 

 

 

Client Side

<%@ Register TagPrefix="telerik" Namespace="Telerik.Web.UI" Assembly="Telerik.Web.UI" %>

 

<head runat="server">

    <title>未命名頁面</title>

    <script language="javascript" type="text/javascript">

      function OpenWin() {

        var oWnd = radopen("TestOpenWin.aspx" , "RadWindow1");

      }

    </script>

  </head>

  <body>

    <form id="form1" runat="server">

<asp:ScriptManager ID="ScriptManager" runat="server"/>

      <telerik:RadWindowManager ID="RadWindowManager1" ShowContentDuringLoad="False" VisibleStatusbar="False" ReloadOnShow="True" runat="server" Behavior="Default">

        <Windows>

          <telerik:RadWindow ID="RadWindow1" Width="550px" Height="500px" NavigateUrl="TestOpenWin.aspx" runat="server" style="display:none;"></telerik:RadWindow>

        </Windows>

   </telerik:RadWindowManager>

 

<asp:Button ID="Button2" runat="server" Text="開啟" OnClientClick="OpenWin(); return false;"/>

</form>

</body>

2010060902ASP .NET:開啟新視窗四部曲 

 

 

 

 

 

我目前只會這些,其他類似需求請善用孤狗喔!


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 姊姊❉心得報告 的頭像
    姊姊❉心得報告

    姊姊❉心得報告

    姊姊❉心得報告 發表在 痞客邦 留言(0) 人氣()