События LoginUser_Authenticate и LoggingIn не срабатывают

В настоящее время я разрабатываю веб-сайт, который использует FormAuthentication для входа пользователя в домен ActiveDirectory. Мне нужно создать форму входа для обработки учетных данных пользователя, поскольку они должны иметь возможность входить в несколько доменов независимо от локального пользовательского домена ПК.

Я решил, что буду использовать Login WebControl. Моя проблема в том, что ни события Authenticate, ни LoggingIn не срабатывают, когда пользователь входит в систему.

Вот моя страница входа aspx:

<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="Logon.aspx.cs" Inherits="WebSite1.Logon1" %>

<%@ Register Assembly="DevExpress.Web.ASPxEditors.v11.2, Version=11.2.9.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a" Namespace="DevExpress.Web.ASPxEditors" TagPrefix="dx" %>

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <p>
        Por favor ingrese usuario y contraseña.
    </p>
    <asp:Login ID="LoginUser" runat="server"
        RenderOuterTable="false" RememberMeSet="true" FailureText="El usuario/contraseña no es correcto, por favor intente nuevamente"
        OnAuthenticate="LoginUser_Authenticate" OnLoggingIn="LoginUser_LoggingIn">
        <LayoutTemplate>
            <span class="failureNotification">
                <asp:Literal ID="FailureText" runat="server"></asp:Literal>
            </span>
            <dx:ASPxValidationSummary ID="LoginUserValidationSummary" runat="server" CssClass="failureNotification" ValidationGroup="LoginUserValidationGroup">
            </dx:ASPxValidationSummary>
            <div class="accountInfo">
                <fieldset class="login">
                    <legend>Información de cuenta</legend>
                    <p>
                        <dx:ASPxLabel ID="DomainLabel" runat="server" Text="Dominio:" AssociatedControlID="Domain">
                        </dx:ASPxLabel>
                        <dx:ASPxComboBox ID="Domain" runat="server" Width="250px">
                        </dx:ASPxComboBox>
                        <asp:RequiredFieldValidator ID="DomainRequired" runat="server" ControlToValidate="Domain"
                            CssClass="failureNotification" ErrorMessage="El dominio es requerido." ToolTip="El dominio es requerido."
                            ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
                    </p>
                    <p>
                        <dx:ASPxLabel ID="UserNameLabel" runat="server" Text="Usuario:" AssociatedControlID="UserName">
                        </dx:ASPxLabel>
                        <dx:ASPxTextBox ID="UserName" runat="server" CssClass="textEntry" Width="250px">
                        </dx:ASPxTextBox>
                        <asp:RequiredFieldValidator ID="UserNameRequired" runat="server" ControlToValidate="UserName"
                            CssClass="failureNotification" ErrorMessage="El nombre de usuario es requerido." ToolTip="El nombre de usuario es requerido."
                            ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
                    </p>
                    <p>
                        <dx:ASPxLabel ID="PasswordLabel" runat="server" Text="Contraseña:" AssociatedControlID="Password">
                        </dx:ASPxLabel>
                        <dx:ASPxTextBox ID="Password" runat="server" CssClass="passwordEntry" Width="250px" Password="True">
                        </dx:ASPxTextBox>
                        <asp:RequiredFieldValidator ID="PasswordRequired" runat="server" ControlToValidate="Password"
                            CssClass="failureNotification" ErrorMessage="La contraseña es requerida." ToolTip="La contraseña es requerida."
                            ValidationGroup="LoginUserValidationGroup">*</asp:RequiredFieldValidator>
                    </p>
                    <p>
                        <dx:ASPxCheckBox ID="RememberMe" runat="server">
                        </dx:ASPxCheckBox>
                        <dx:ASPxLabel ID="RememberMeLabel" runat="server" Text="Mantener sesión iniciada" AssociatedControlID="chkRememberMe" CssClass="inline">
                        </dx:ASPxLabel>
                    </p>
                </fieldset>
                <dx:ASPxButton ID="LoginButton" runat="server" Text="Iniciar sesión" ValidationGroup="LoginUserValidationGroup">
                </dx:ASPxButton>
            </div>
        </LayoutTemplate>
    </asp:Login>
</asp:Content>

Как видите, OnAuthenticate="LoginUser_Authenticate" OnLoggingIn="LoginUser_LoggingIn" установлены в свойствах элемента управления входом в систему. Я определил оба метода в коде позади и установил точки останова. Страница выполняет обратную передачу, так как она обновляется, но события никогда не вызываются.

Я уже проверил AutoEventWireup="true", и web.config настроен на использование этой формы для входа в систему:

<authentication mode="Forms"> <forms loginUrl="logon.aspx" name="adAuthCookie" timeout="10" path="/"> </forms>

Кто-нибудь может подсказать, что искать, чтобы найти, что может быть не так?

РЕДАКТИРОВАТЬ:

В соответствии с запросом, вот мой код за классом:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using DevExpress.Web.ASPxEditors;

namespace WebSite1
{
    public partial class Logon1 : System.Web.UI.Page
    {
        protected ASPxComboBox Domain;

        protected void Page_Load(object sender, EventArgs e)
        {
            Domain = LoginUser.FindControl("Domain") as ASPxComboBox;
            Domain.Items.Clear();
            String allowedDomains = System.Web.Configuration.WebConfigurationManager.AppSettings["AllowedDomains"];
            List<string> allowedDomainsList = allowedDomains.Split('|').ToList<string>();
            foreach (string allowedDomain in allowedDomainsList)
            {
                Domain.Items.Add(allowedDomain, allowedDomain);
            }
            Domain.SelectedIndex = 0;
        }

        protected void LoginUser_LoggingIn(object sender, LoginCancelEventArgs e)
        { 

        }

        protected void LoginUser_Authenticate(object sender, AuthenticateEventArgs e)
        {

        }
    }
}

Редактировать 2:

Изменено public partial class Login1 : System.Web.UI.Page на public partial class Login : System.Web.UI.Page

И с CodeBehind="Logon.aspx.cs" Inherits="WebSite1.Logon1" по CodeBehind="Logon.aspx.cs" Inherits="WebSite1.Logon"

Пока изменений в поведении нет.

Редактировать 3:

Я нашел эту ссылку Настройка внешнего вида ASP.NET Элементы управления входом, которые объясняют, что мне нужно поймать командное событие моей кнопки входа. Поэтому я реализовал этот метод:

protected void LoginButton_Command(object sender, CommandEventArgs e)
{
    switch (e.CommandName)
    {
        case "LogginIn":
            LoginUser_LoggingIn(sender, e);
            break;
    }
}

Теперь моя проблема в том, что я не знаю, как вызвать событие LogginIn, поскольку e — это CommandEventArgs, а мне нужно LoginCancelEventArgs.


person MCaetano    schedule 25.03.2014    source источник
comment
Является ли элемент управления входом внутри FORM? Я не могу сказать, потому что вы не разместили разметку для страницы Master.   -  person Icarus    schedule 25.03.2014
comment
Icarus, <asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> определяется на главной странице и находится внутри тега формы. Я могу опубликовать код Site.Master, если вам это нужно.   -  person MCaetano    schedule 25.03.2014
comment
Если вы объявили методы как protected в своем коде позади, я не могу придумать ничего другого, что могло бы вызвать проблему.   -  person Icarus    schedule 25.03.2014
comment
Они объявлены как protected.   -  person MCaetano    schedule 25.03.2014
comment
Я попытаюсь удалить наследование главной страницы и посмотрю, что произойдет. Хотя я сомневаюсь, что это будет иметь значение, иначе у всех других моих форм была бы такая же проблема.   -  person MCaetano    schedule 25.03.2014
comment
Я вижу: CodeBehind=Logon.aspx.cs Inherits=WebSite1.Logon1. Можете ли вы убедиться, что он указывает на правильный класс? Может быть, вы можете поделиться кодом своей страницы входа.   -  person gbs    schedule 26.03.2014
comment
@gbs Он указывает на правильный класс, как вы можете видеть в моем редактировании.   -  person MCaetano    schedule 26.03.2014
comment
На самом деле это не так. Я только что заметил, что мой код класса был определен как Logon1. Раньше этого не замечал. Чего я не понимаю, так это того, как работал код Page_Load. Я изменил public partial class Logon1 : System.Web.UI.Page на public partial class Logon : System.Web.UI.Page, но события все равно не запускались.   -  person MCaetano    schedule 26.03.2014
comment
Как насчет того, чтобы начать с нуля для устранения неполадок... Добавьте новую страницу и перетащите только элемент управления входом в систему (без настройки) и добавьте обработчики для этих двух событий, то есть простую страницу с элементом управления входом.   -  person gbs    schedule 26.03.2014
comment
Это действительно работает. Что заставляет меня думать, что у меня может быть проблема с кнопкой «Войти». Может быть, отсутствует какое-то свойство команды, чтобы сообщить элементу управления входом в систему, что пользователь хочет войти в систему?   -  person MCaetano    schedule 26.03.2014
comment
Я нашел эту ссылку [msdn.microsoft.com /en-us/library/ms178339(v=vs.100).ASPX].   -  person MCaetano    schedule 26.03.2014
comment
Хорошо, вы используете кнопку DX... может быть, это что-то делает. Попробуйте добавить к кнопке CommandName=Login.   -  person gbs    schedule 26.03.2014
comment
Это сделало это. Спасибо за совет :)   -  person MCaetano    schedule 26.03.2014
comment
Вам не нужно ничего добавлять для события Logging, кроме обработчика. Он должен быть поднят для вас с помощью Login Control.   -  person gbs    schedule 26.03.2014


Ответы (1)


Согласно тому, что вы написали, ваше общедоступное частичное имя класса и атрибут Inherits по-прежнему не совпадают.

Inherits="WebSite1.Logon"

но

public partial class Login : System.Web.UI.Page

Разве оба не должны быть либо Login, либо Logon?

person William Smith    schedule 26.03.2014
comment
Извините, это была ошибка копирования и вставки. Я скопировал его из тестовой формы. В обоих случаях это вход в систему. - person MCaetano; 26.03.2014