Pregunta

Tengo control LogOn.ascx que se encuentra en la página principal Site.Master:

<% Html.RenderPartial("LogOn"); %>

Este control contiene la forma con el correo electrónico y la contraseña textboxed que se somete a LoginController:

public class LoginController : Controller
{
     ...
    [HttpPost]
    public ActionResult Login(string email, string password)
    {
        if (this.userRepository.ExistByEmail(email) &&
            this.authenticationService.IsPasswordMatches(email, password))
        {
            var user = this.userRepository.GetByEmail(email);
            this.userSession.LogIn(user);
            return PartialView("LogOn", user);
        }
        return PartialView("LogOn");
    }
}

Así que si el usuario se autentica correctamente Paso usuario en el modelo de vista parcial LogOn (simplificada):

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Core.Model.User>" %>
<%= this.Model.FirstName %>

Tengo 2 problemas con este código:

  1. Después de llamar return PartialView("LogOn") consigo excepción " 'UI.Services.ControllerFactory' El IControllerFactory no devolvió un controlador para el nombre 'default.aspx'" Este problema se resuelve mediante la adición de enrutamiento para "default.aspx". Pero ¿por qué solicitud va a "default.aspx" cuando llamo return PartialView(..)? (Estoy usando servidores web VS)

  2. consigo excepción de referencia nula dentro LogOn.ascx incluso si el usuario se ha autenticado con éxito y valor no nulo se pasó en PartialView en la línea siguiente:

¿Alguien tiene una idea de por qué usuario no se pasa a LogOn.ascx? Gracias

¿Fue útil?

Solución

Asumo que su formulario de acceso está haciendo un estándar enviar de vuelta al servidor (es decir, el envío de toda la página) en lugar de un puesto de AJAX?

Si ese es el caso, entonces el resultado de la acción de la acción de sesión debe ser un entero opinión, no una parcial -. No hay ninguna página a la sede de la parcial

A raíz de esto como que ha añadido una ruta por defecto para ahora, usted no está realmente pasando el objeto de usuario a la parcial como usted la llama de la página:

<% Html.RenderPartial("LogOn"); %>

Se necesitaría estar llamando esto con el usuario, lo que significaría que tiene que ser la adición de que el usuario sea el ViewData o los modelos que estás pasando de vuelta si usted no está usando los proveedores de pertenencia.

Asumo que estás haciendo algunas comprobaciones en el inicio de sesión parcial para comprobar si la petición es autenticada que no sea la comprobación para ver si el objeto Usuario ha sido aprobada en - porque la mayoría de las llamadas a este parcial se efectuará a partir de la página maestra que no pasa en el objeto de usuario, éstos serán en su mayoría fallar.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top