2010-01-21 4 views
2

C'est probablement quelque chose de petit, je ne vois pas ... j'ai un UserControls_LoginPopUp avec l'une des propriétés comme:pourquoi null (login pop-up)

public string urlForRedirecting {get; set;} 

Ce contrôle utilisateur contient un ModalPopupExtender et une méthode pour connexion:

public void Login_Click(object sender, EventArgs e) 
{ 
    string user = txtUser.Text; 
    string passwordMD5 = UtilsStatic.GetMD5Hash(txtPassword.Text); 
    int id = checkUserAtLogin(user, passwordMD5); 
    if (id != -1) 
    { 
     //MySession.Current.userId = id; 
     lblStatus.Text = "Autentificare reusita!"; 
     loginPopUp.Hide(); 

     //The user will be redirected 
     Response.Redirect(this.urlForRedirecting); 
     this.urlForRedirecting = ""; 
    } 
    else 
    { 
     MySession.Current.userId = -1; 
     lblStatus.Text = "Autentificare esuata!"; 
     loginPopUp.Show(); 
    } 
} 

maintenant, une autre page, un utilisateur clique sur un lien, et une méthode est tiré lorsque l'extension modale est indiquée pour qu'il puisse se connecter. S'il vous plaît Notez que je remplirai la propriété urlForRedirecting:

public void redirectToWishList(object sender, EventArgs e) 
{ 
    if (UtilsStatic.getUserLoggedInId() == -1) 
    { 
     ASP.usercontrols_loginpopup_ascx loginUserControl = (ASP.usercontrols_loginpopup_ascx)UtilsStatic.FindControlRecursive(Page, "loginPopUp"); 
     ModalPopupExtender modal = (ModalPopupExtender)loginUserControl.FindControl("loginPopUp"); 
     modal.Show(); 
     //put the link to which the redirect will be done if the user will succesfully login in 
     loginUserControl.urlForRedirecting = getWishListLink(); 
    } 
    else 
     Response.Redirect(getWishListLink()); 

} 

Le problème est que, après les journaux de UserR à succès, l'URL est nulle (mais je l'ai déjà terminé !!!)

Response.Redirect(this.urlForRedirecting); 

Voyez-vous pourquoi?

Répondre

0

Lorsque vous cliquez sur la ligne de code:

modal.Show(); 

Votre contrôle utilisateur sera affiché et vous définissez la valeur après il est donc fixé pas lorsque le formulaire est ouvert.

Essayez de déplacer le code pour que ce soit comme:

ASP.usercontrols_loginpopup_ascx loginUserControl = (ASP.usercontrols_loginpopup_ascx)UtilsStatic.FindControlRecursive(Page, "loginPopUp"); 
loginUserControl.urlForRedirecting = getWishListLink(); 
ModalPopupExtender modal = (ModalPopupExtender)loginUserControl.FindControl("loginPopUp"); 
modal.Show(); 

Cela définira la propriété urlForRedirecting avant d'ouvrir la forme, ce qui signifie que vous pouvez y accéder une fois qu'il est ouvert.

+0

Salut Fermin. J'ai déplacé le code mais il y a le même problème. Cependant, la propriété urlForRedirecting est une propriété de loginUserControl, elle ne dépend donc pas de .show. Merci pour votre suggestion, de toute façon. –

+1

Essayez de créer urlForRedirecting static car la valeur sera perdue lors de la publication. – Fermin

+0

Votre commentaire a été utile. Bien que cela ne réponde pas à ma question, cela m'a donné l'idée d'utiliser une classe statique pour ce genre de situations. Merci. –

0

Utilisez ViewState entre les publications, sinon la valeur de la propriété sera perdue.

public string UrlForRedirecting 
{ 
    get 
    { 
     object urlForRedirecting = ViewState["UrlForRedirecting"]; 
     if (urlForRedirecting != null) 
     { 
      return urlForRedirecting as string; 
     } 

     return string.Empty; 
    } 

    set 
    { 
     ViewState["UrlForRedirecting"] = value; 
    } 
} 
1

Vous devez toujours rogner vos valeurs de nom d'utilisateur/mot de passe pour supprimer les espaces.

string user = txtUser.Text.Trim(); 
string passwordMD5 = UtilsStatic.GetMD5Hash(txtPassword.Text.Trim()); 

Je crois que GetMD5Hash va créer des valeurs diffrent si vous avez "Value" vs "Value".

+0

Merci loxp. Très utile! –

Questions connexes