如何在web表单应用程序中的site.Master页面中调用.ASCX

时间:2017-10-09 21:37:40

标签: asp.net

我已经为注册和登录创建了.ASCX控件,并在site.master中提供了参考。当点击登录时,登录弹出窗口应该出现并且注册相同。如果我先放置<uc:Login ID="ucLogin" runat="server" />代码,那么登录工作并且注册没有,反之亦然。我认为问题在于:

<uc:Login ID="ucLogin" runat="server" /> 
<uc1:Registration ID="Registration" runat="server"  />

我不知道将<uc1:Registration ID="Registration" runat="server"/>放在<asp:LoginView runat="server" ViewStateMode="Disabled"&gt;下是否合适整个site.Master页面如下所示:

 <%@ Master Language="C#" AutoEventWireup="true" CodeFile="Site.master.cs" Inherits="SiteMaster" %>

    <%@ Register Src = "~/Controls/Login.ascx" TagName = "Login" TagPrefix = "uc" %>
    <%@ Register Src="~/Controls/Registration.ascx" TagPrefix="uc1" TagName="Registration" %>

    <!DOCTYPE html>

    <html lang="en">
    <head runat="server">

        <asp:PlaceHolder runat="server">

        </asp:PlaceHolder>

    </head>
    <body>
        <form runat="server">
            <asp:ScriptManager runat="server">

            </asp:ScriptManager>

                        <asp:LoginView runat="server" ViewStateMode="Disabled">
                            <AnonymousTemplate>
                                <ul class="nav navbar-nav navbar-right">

                                    <li>  <uc:Login ID="ucLogin" runat="server" />     </li>
                                    <li> <uc1:Registration ID="Registration" runat="server"  /></li>
                                </ul>

                            </AnonymousTemplate>
                          </asp:LoginView>  

                    </div>
                </div>
            </div>
            <div class="container body-content">
                <asp:ContentPlaceHolder ID="MainContent" runat="server">
                </asp:ContentPlaceHolder>
                <hr />

            </div>
        </form>
    </body>
    </html>

Login.ascx是:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Login.ascx.cs" Inherits="Login" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

<asp:LinkButton ID="lnkLogin" runat="server" Text="Login"></asp:LinkButton>
<asp:Panel ID="pnlLogin" runat="server" CssClass="modalPopup" Style="display: none">


    <div class="form-group">
        <asp:Label runat="server" AssociatedControlID="Email" CssClass="col-md-3 control-label">User name</asp:Label>
        <div class="col-md-9">
            <asp:TextBox runat="server" ID="Email" CssClass="form-control" />
            <asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
                CssClass="text-danger" ErrorMessage="The user name field is required." />
        </div>
    </div>
    <div class="form-group">
        <asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-3 control-label">Password</asp:Label>
        <div class="col-md-9">
            <asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
            <asp:RequiredFieldValidator runat="server" ControlToValidate="Password" />
        </div>
    </div>

    <div class="form-group">

        <asp:Button runat="server" OnClick="LogIn" Text="Log in" CssClass="btn btn-default" />
    </div>

</asp:Panel>
<cc1:ModalPopupExtender ID="popup" runat="server" DropShadow="false"
    TargetControlID="lnkLogin" PopupControlID="pnlLogin"
    BackgroundCssClass="modalBackground">
</cc1:ModalPopupExtender>

registration.ascx页面如下所示:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Registration.ascx.cs" Inherits="Registration" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc11" %>

<asp:LinkButton ID="lnkRegistration" runat="server" Text="Registration"></asp:LinkButton>
<asp:Panel ID="pnlRegistration" runat="server">

    <div class="form-group">
        <asp:Label runat="server" AssociatedControlID="EmailId" CssClass="col-md-2 control-label">Email Address</asp:Label>
        <div class="col-md-10">
            <asp:TextBox runat="server" ID="EmailId" CssClass="form-control" />
            <asp:RequiredFieldValidator runat="server" ControlToValidate="EmailId" />
        </div>
    </div>
    <div class="form-group">
        <asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-2 control-label">Password</asp:Label>
        <div class="col-md-10">
            <asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
            <asp:RequiredFieldValidator runat="server" ControlToValidate="Password" />
        </div>
    </div>

    <div class="form-group">
        <asp:Button runat="server" OnClick="CreateUser_Click" Text="Register" CssClass="btn btn-default" />
    </div>

</asp:Panel>

<cc11:ModalPopupExtender ID="popup1" runat="server" DropShadow="false"
    TargetControlID="lnkRegistration" PopupControlID="pnlRegistration"
    BackgroundCssClass="modalBackground" CancelControlID="lnkCancel">
</cc11:ModalPopupExtender>

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:1)

真的,问题是你被要求创建.ASCX控件&#34;,其中引用中的所有内容都是单数。相反,您创建了两个控件(复数)。最好做一个控件,如:

在主人:

<%@ Register Src = "~/Controls/LoginRegister.ascx" TagName = "LoginRegister" TagPrefix = "uc" %>

...


<asp:LoginView runat="server" ViewStateMode="Disabled">
    <AnonymousTemplate>
        <uc:LoginRegister ID="ucLogin" runat="server" /> 
    </AnonymousTemplate>
</asp:LoginView>

然后在新的组合loginregister.ascx

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Login.ascx.cs" Inherits="Login" %>
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc" %>

<ul>
    <li><asp:LinkButton ID="lnkLogin" runat="server" Text="Login"></asp:LinkButton></li>
    <li><asp:LinkButton ID="lnkRegistration" runat="server" Text="Registration"></asp:LinkButton></li>
<ul>

<asp:Panel ID="pnlLogin" runat="server" CssClass="modalPopup" Style="display: none"> 
    <div class="form-group">
        <asp:Label runat="server" AssociatedControlID="Email" CssClass="col-md-3 control-label">User name</asp:Label>
        <div class="col-md-9">
            <asp:TextBox runat="server" ID="Email" CssClass="form-control" />
            <asp:RequiredFieldValidator runat="server" ControlToValidate="Email"
                CssClass="text-danger" ErrorMessage="The user name field is required." />
        </div>
    </div>
    <div class="form-group">
        <asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-3 control-label">Password</asp:Label>
        <div class="col-md-9">
            <asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
            <asp:RequiredFieldValidator runat="server" ControlToValidate="Password" />
        </div>
    </div>

    <div class="form-group">

        <asp:Button runat="server" OnClick="LogIn" Text="Log in" CssClass="btn btn-default" />
    </div>
</asp:Panel>

<asp:Panel ID="pnlRegistration" runat="server">
    <div class="form-group">
        <asp:Label runat="server" AssociatedControlID="EmailId" CssClass="col-md-2 control-label">Email Address</asp:Label>
        <div class="col-md-10">
            <asp:TextBox runat="server" ID="EmailId" CssClass="form-control" />
            <asp:RequiredFieldValidator runat="server" ControlToValidate="EmailId" />
        </div>
    </div>
    <div class="form-group">
        <asp:Label runat="server" AssociatedControlID="Password" CssClass="col-md-2 control-label">Password</asp:Label>
        <div class="col-md-10">
            <asp:TextBox runat="server" ID="Password" TextMode="Password" CssClass="form-control" />
            <asp:RequiredFieldValidator runat="server" ControlToValidate="Password" />
        </div>
    </div>

    <div class="form-group">
        <asp:Button runat="server" OnClick="CreateUser_Click" Text="Register" CssClass="btn btn-default" />
    </div>
</asp:Panel>

<cc:ModalPopupExtender ID="popup" runat="server" DropShadow="false"
    BackgroundCssClass="modalBackground">
</cc:ModalPopupExtender>

您还要更新* .cs文件以便新控件,以便链接的回发为PopUpExtender设置正确的字段。或者,更好的是,您重新编写该部分以使用javascript(并且仅使用javascript)来显示正确的面板,这样在用户按下登录或注册按钮之前不需要服务器事件。