<asp:login>控件与页面上的其他按钮冲突</asp:login>

时间:2014-02-21 17:12:07

标签: asp.net vb.net webforms web-controls

我不确定如何制定这个问题的标题。我的问题是我有一个控制的.ascx控件。当我创建一个页面,我在内容中有按钮时,按下按钮会导致提交按钮被触发....我完全不知道为什么会发生这种情况。请给我任何建议或想法如何解决这个问题。

我的控制代码是:

    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="TopRightMenuAnonn.ascx.vb" Inherits="Ctrls_TopRightMenuAnonn" %>


<ul class="nav pull-right" id="top-right_menu">
    <li style="padding: 5px" class="dropdown">
        <a class="dropdown-toggle" href="#" data-toggle="dropdown" style="padding:10px 15px;color: #73767D">Login<strong class="caret"></strong></a>
        <div id="loginForm" class="dropdown-menu pull-right" style="padding: 15px;">
            <asp:Login  runat="server" ID="login1" DestinationPageUrl="~/Home.aspx">
                <LayoutTemplate>
                    <asp:TextBox runat="server" ID="Username" style="margin-bottom:15px;" PlaceHolder="Username" Height="30px"></asp:TextBox>
                    <asp:TextBox runat="server" ID="Password" style="margin-bottom: 15px;" PlaceHolder="Password" Height="30px" TextMode="Password" />
                    <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="Username" style="color: red" Text="Please enter an username."></asp:RequiredFieldValidator>
                    <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password" style="color: red" Text="Please enter a password."></asp:RequiredFieldValidator>
                    <asp:Label ID="lblError" runat="server" Visible="false" Text=""></asp:Label>
                    <asp:Button ID="Login" runat="server" CommandName="Login" CssClass="btn btn-primary" style="clear: left; width: 100%; height: 32px; font-size: 13px;" Text="Sign In"></asp:Button>
                    <a href="#getpass" class="fancybox" id="forgotpass">Forgot password?</a><br />
                    <!--Fancybox for pass-->
                        <div style="display:none">
                            <div id="getpass" style="width: 100%;height:100%">
                                <span>Please enter your username to retrieve your password.</span>
                                <br />
                                <asp:TextBox runat="server" ID="txtForgotPass" PlaceHolder="Username" Height="30px" Width="100%" style="margin-top: 20px;margin-bottom:20px;"></asp:TextBox>
                                <asp:Button runat="server" ID="btnForgotPass" CssClass="btn btn-primary" style="clear:left;float: right;padding:10px" Text="Send My Password" />
                            </div>
                        </div>
                    <!--End of fancybox for pass-->
                    <a href="#getuser" class="fancybox" id="forgotuser">Forgot username?</a>
                    <!-- Fancybox for user -->
                        <div style="display:none">
                            <div id="getuser" style="width: 100%;height: 100%">
                                <span>Please enter your e-mail to retrieve your username.</span>
                                <br />
                                <asp:TextBox runat="server" ID="txtForgotUser" PlaceHolder="example@materialconnexion.com" Height="30px" Width="100%" style="margin-top: 20px; margin-bottom: 20px;"></asp:TextBox>
                                <asp:Button runat="server" ID="btnForgotUser" CssClass="btn btn-primary" style="clear:left;float: right;padding: 10px" Text="Send My Username" />
                            </div>
                        </div>
                    <asp:ValidationSummary ID="ValidationSummary1" runat="server" ValidationGroup="login1" />
                    <!-- End of fancybox for user-->
                </LayoutTemplate>
            </asp:Login>

        </div>
    </li>
    <li style="padding: 15px;border-left: 1px solid #999"><a style="padding: 0px !important;color: #73767D" href="../regtest.aspx">Register</a></li>
    <li style="padding: 15px;border-left: 1px solid #999"><a style="padding: 0px !important;color: #73767D" href="../Pricing.aspx">Buy Credits</a></li>
</ul>

我的控制后端代码是(这是狗屎发生的地方,我无法找到使其正常工作的方法):

    Option Strict On
Partial Class Ctrls_TopRightMenuAnonn
    Inherits System.Web.UI.UserControl
    Protected Sub login1_LoggingIn(sender As Object, e As LoginCancelEventArgs) Handles login1.LoggingIn
        Dim m As New MemberData(New MatconnDB(), login1.UserName)
        If m.IsNew() Then
            e.Cancel = True 'not in database
            Return
        End If
        If m.ExpirationDate < Now() Then
            e.Cancel = True
            Return
        End If
        If m.Active = False Then
            Return
        End If
        If m.unameEmail = False Then
            Return
        End If
        If (MemberData.GetPassword(login1.UserName.ToString()) = MemberData.Encrypt(login1.Password.ToString())) Then
            Session("User") = login1.UserName.ToString()
            Response.Redirect("~/Home.aspx")
        ElseIf MemberData.GetPassword(login1.UserName.ToString()) = login1.Password.ToString() Then
            Session("User") = login1.UserName.ToString()
            Response.Redirect("~/Home.aspx")
            ' Else
            'I should put proper error messages here !!!!!!
        End If

    End Sub

End Class

我的主页文件是:

<%@ Master Language="VB" CodeFile="TopMenu.master.vb" Inherits="MasterPageLogged" AutoEventWireup="false" %>

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="utf-8" />
        <title>ssds</title>

</head>
<body>
    <form id="form1" runat="server">
    <div id="wrap">
        <nav class="navbar navbar-default navbar-fixed-top" role="navigation">
            <div class="container" id="cont_left-menu">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#left-menu">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a class="navbar-brand" href="HomePage.aspx">
                        <img style="margin-top: -5px;" src="../images/mc-logo.jpg" />
                    </a>
                </div>
                <div class="collapse navbar-collapse" id="left-menu">
                    <ul class="nav navbar-nav">
                        <li>
                            <a href="#">Services</a>
                        </li>
                        <li>
                            <a href="#">Tool</a>
                        </li>
                        <li>
                            <a href="#">Work</a>
                        </li>
                        <li>
                            <a href="#">Matter</a>
                        </li>
                        <li>
                            <a href="#">About</a>
                        </li>
                        <li>
                            <a href="#">Contact</a>
                        </li>
                    </ul>
                    <asp:ContentPlaceHolder runat="server" ID="ContentTopMenuRight">

                    </asp:ContentPlaceHolder>
                </div>
            </div>
        </nav>
        <asp:ContentPlaceHolder runat="server" ID="ContentPlaceHolder1">

        </asp:ContentPlaceHolder>
    </div>
    </form>
    <link type="text/css" rel="stylesheet" href="../css/bootstrap.css"/>
    <link type="text/css" rel="stylesheet" href="../css/bootstrap-theme.css"/>
    <link type="text/css" rel="stylesheet" href="../css/Styles.css" />
    <link rel="stylesheet" href="http://code.jquery.com/ui/1.10.3/themes/smoothness/jquery-ui.css" />
    <script src="http://code.jquery.com/jquery-1.9.1.js"></script>
    <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
    <script src="../js/jquery.fancybox.js"></script>
    <script src="http://netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>
    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script>
    <link rel="stylesheet" href="../css/jquery.fancybox.css" type="text/css" media="screen" />
</body>
</html>

我的简单测试页面是:

<%@ Page Language="VB" AutoEventWireup="false" MasterPageFile="~/Masters/TopMenu.master" CodeFile="regtest.aspx.vb" Inherits="regtest" %>

<%@ Register Src="~/Ctrls/TopRightMenuAnonn.ascx" TagName="TopRightMenuLogged" TagPrefix="tma" %>

<%@ MasterType VirtualPath="~/Masters/TopMenu.master" %>

<asp:Content ID="Content1" ContentPlaceHolderID="ContentTopMenuRight" runat="server">
    <tma:TopRightMenuLogged ID="TopRightMenuLogged1" runat="server" />
</asp:Content>

<asp:Content ID="Content2" runat="server" ContentPlaceHolderID="ContentPlaceHolder1">
    <div class="container">
        <div class="col-md-6">
            <asp:TextBox runat="server" ID="txtName" PlaceHolder="Name" class="txtedit"></asp:TextBox>
            <asp:TextBox runat="server" ID="txtSurname" PlaceHolder="Surname" class="txtedit"></asp:TextBox>
            <asp:TextBox runat="server" ID="txtMail" PlaceHolder="Email" class="txtedit"></asp:TextBox>
            <asp:TextBox runat="server" ID="txtCompany" PlaceHolder="Company" class="txtedit"></asp:TextBox>
            <asp:TextBox runat="server" ID="txtPass" PlaceHolder="Password" class="txtedit"></asp:TextBox>
            <asp:TextBox runat="server" ID="txtPassV" PlaceHolder="Confirm Password" class="txtedit" AutoPostBack="True"></asp:TextBox>
            <br />
            <br />
            <asp:CheckBox runat="server" ID="chkbox" Text="&nbspTerm and Conditions" style="margin-top: 10px" />
            <br />
            <br />
            <br />
            <br />
            <asp:Button runat="server" ID="btnReg" Text="blqblq" />
            <asp:Label runat="server" ID="lblText" Text=""></asp:Label>
            <asp:Label runat="server" ID="lblCaption" Text=""></asp:Label>
        </div>
    </div>
</asp:Content>

请指教.. 提前致谢!

1 个答案:

答案 0 :(得分:0)

几个地方的MSDN docs page for the Button class州:

  

默认情况下,所有按钮控件在单击时都会提交页面。

从您的问题中不清楚哪个<asp:Button>控件导致了不需要的PostBack:

  • 示例页面中的那个(btnReg)或
  • 您的UserControl中的一个(登录,btnForgotPass,btnForgotUser)

但是,如果您不希望他们提交页面/导致PostBack,那么您需要

  • 使用客户端验证/ etc或
  • 来防止这种情况
  • 使用与<asp:Button>不同的控件来执行您想要的操作。