Web畫面最常遇到開啟新視窗的需求。
例如:開啟新視窗顯示明細畫面,修改儲存後,自動關閉新視窗,再重新整理母畫面。
以下介紹蘭花常寫的四種方法。程式碼僅截取與主題相關部份。
※Button的OnClientClick
在最單純的WebForm,可以利用Button的OnClientClick呼叫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>
※Button的OnClick
我們通常遇到的新視窗,都是動態的畫面,而非固定單一的畫面,時常需要去後端查個資料庫、做個判斷,再開啟相對應的畫面。
這些無法在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
※HyperLink的NavigateUrl
你上面都給人家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
※Telerik的RadWindow
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>
我目前只會這些,其他類似需求請善用孤狗喔!
留言列表