В настоящее время я разрабатываю веб-сайт, который использует 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
.
FORM
? Я не могу сказать, потому что вы не разместили разметку для страницыMaster
. - person Icarus   schedule 25.03.2014<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
определяется на главной странице и находится внутри тега формы. Я могу опубликовать код Site.Master, если вам это нужно. - person MCaetano   schedule 25.03.2014protected
в своем коде позади, я не могу придумать ничего другого, что могло бы вызвать проблему. - person Icarus   schedule 25.03.2014protected
. - person MCaetano   schedule 25.03.2014public partial class Logon1 : System.Web.UI.Page
наpublic partial class Logon : System.Web.UI.Page
, но события все равно не запускались. - person MCaetano   schedule 26.03.2014