询问者
求教:弹出窗口并返回值问题

常规讨论
-
我正在学习Asp.Net编程,碰到一个问题特来求教。在一个主页面上有二个输入框TextBox,用来给经手人、证明人电子签名。采取的方法是:单击输入框后面的签名按钮,弹出子窗口,在子窗口中输入用户名和密码进行验证,验证通过后,子窗口自动关闭,并将用户的姓名返回到主窗口的输入框中。
要求:1用户不能在主窗口的输入框中直接输入或粘贴姓名;
2在弹出子窗口后,主窗口不可以操作;
3代码在主要浏览器中默认设置下均可用,不需要做额外设置或安装插件等。
下面是我测试通过的代码,在IE8中可以使用,在更高版本或Chrome(默认设置)中不可使用。
====================================================================================================
MasterPage.master
----------------------------------------------------------------------------------------------------
<%@ Master Language="VB" CodeFile="MasterPage.master.vb" Inherits="MasterPage" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>无标题页</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:Label ID="Label1" runat="server" Text="这里是母版页"></asp:Label>
<br />
要求:<br />
1.单击[签名]按钮后,在弹出的子窗口中输入用户名和密码进行验证,通过后自动关闭子窗口,在主窗口的输入框中显示该用户的姓名.
<br />
2.用户不可以直接在主窗口的输入框中输入或粘贴姓名.
<br />
3.在弹出子窗口后,主窗口不可操作.
<br />
4.不能存在浏览器不兼容问题.
<br />
5.最好不需要在服务器或客户端做特别设置或安装插件等.
<br />
<asp:contentplaceholder id="ContentPlaceHolder1" runat="server">
</asp:contentplaceholder>
</div>
</form>
</body>
</html>
====================================================================================================
Default.aspx
----------------------------------------------------------------------------------------------------
<%@ Page Language="VB" MasterPageFile="~/MasterPage.master" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
<br />
这里是主窗口.
<br />
<asp:Label ID="Label1" runat="server" Text="姓名"/>
<asp:TextBox ID="TextBoxName" runat="server" onpaste="return false" style="IME-MODE:disabled;" Width ="100px" OnKeyPress="if(event.keyCode==1) {event.returnValue=true;} else{event.returnValue=false;}" />
这句要是能更改为<asp:TextBox ID="TextBoxName" runat="server" enable="false" />就更好
<asp:Button ID="ButtonSign" runat="server" Text="签名" />
</asp:Content>
====================================================================================================
Sign.aspx
----------------------------------------------------------------------------------------------------
<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Sign.aspx.vb" Inherits="Sign" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head id="Head1" runat="server">
<title ></title>
<base target ="_self" />
</head>
<body>
<form id="form1" runat="server">
<div>
这里是子窗口.
<br />
<asp:Label ID="Label1" runat="server" Text="用户"/>
<asp:TextBox ID="TextBoxUser" runat="server"/>
<br />
<asp:Label ID="Label2" runat="server" Text="密码"/>
<asp:TextBox ID="TextBoxPassword" runat="server" TextMode="Password"/>
<br />
<asp:Button ID="ButtonOK" runat="server" Text="确定" />
<asp:Button ID="ButtonCancle" runat="server" Text="取消" />
<br />
<asp:Label ID="LabelMsg" runat="server" Text=""/>
</div>
</form>
</body>
</html>====================================================================================================
Sign.aspx.vb
----------------------------------------------------------------------------------------------------
Partial Class Sign
Inherits System.Web.UI.Page
Protected Sub ButtonOK_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles ButtonOK.Click
If TextBoxUser.Text = "admin" And TextBoxPassword.Text = "admin" Then
'用户名+密码正确,返回用户的姓名为"管理员"
Dim s As New StringBuilder()
Dim strName As String = "管理员"
s.Append("<script language=javascript>" & vbLf)
s.Append("window.returnValue='" & strName & "';" & vbLf)
s.Append("window.close();" & vbLf)
s.Append("</script>")
Dim cstype As Type = Me.[GetType]()
Dim cs As ClientScriptManager = Page.ClientScript
Dim csname As String = "ltype"
If Not cs.IsStartupScriptRegistered(cstype, csname) Then
cs.RegisterStartupScript(cstype, csname, s.ToString())
End If
Else
LabelMsg.Text = "用户名或密码错误!请重新输入."
End If
End Sub
End Class
====================================================================================================