none
求教:弹出窗口并返回值问题 RRS feed

  • 常规讨论

  • 我正在学习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 />
            &nbsp;<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
    ====================================================================================================

    2014年8月13日 5:52

全部回复

  • 你好,

    我建议你在IE浏览器中,在IE 8以上的版本的IE中,去调用F12 去调试下,看看你的代码提示什么样的异常信息

    2014年8月14日 8:02