0
Source Error: 

Line 55:                MembershipUser User = Membership.GetUser(UserNameTextBox.Text);
Line 56:   
Line 57:                Object UserGUID= User.ProviderUserKey; //error appeared here
Line 58:   
Line 59:                DataSource.InsertParameters.Add("UserId", UserGUID.ToString());

createuserwizard に追加の手順があり、フォームに入力すると、DB 内にユーザー情報が保存されました。ただし、このエラーが発生しました:

Object reference not set to an instance of an object.

また、リンク 55、57、59 にブレークポイントを設定しました。57 行目から、User は null で、DB から User を取得できませんでした。

コードビハインド:

protected void CreateUserWizard1_CreatedUser(object sender, System.Web.UI.WebControls.LoginCancelEventArgs e)
    {  
       MSCaptcha.CaptchaControl Captcha1 = (CreateUserWizardStep1.ContentTemplateContainer.FindControl("Captcha1") as MSCaptcha.CaptchaControl);

       TextBox txtCaptcha = (TextBox)CreateUserWizardStep1.ContentTemplateContainer.FindControl("txtCaptcha");
       Label Captchalbl = (Label)CreateUserWizardStep1.ContentTemplateContainer.FindControl("Captchalbl");

       Response.Write(txtCaptcha.Text); 

           Captcha1.ValidateCaptcha(txtCaptcha.Text.Trim()); 

           if (!Captcha1.UserValidated)
           {

                Captchalbl.Text = "InValid";

               e.Cancel = true;
           } 
            else
           {
               Captchalbl.Text = "Valid";

               TextBox UserNameTextBox =
              (TextBox)CreateUserWizardStep1.ContentTemplateContainer.FindControl("UserName");

               SqlDataSource DataSource =
                   (SqlDataSource)CreateUserWizardStep1.ContentTemplateContainer.FindControl("InsertExtraInfo");

               MembershipUser User = Membership.GetUser(UserNameTextBox.Text);

               Object UserGUID= User.ProviderUserKey; //here is link 57. 

               DataSource.InsertParameters.Add("UserId", UserGUID.ToString());

               DataSource.Insert();

            }
   }
4

2 に答える 2

1

このメソッド名は「CreateUserWizard1_CreatedUser」ですが、署名から、CreatingUser イベント用であることがわかります。このイベント中、ユーザーはまだ作成されていません。そのために CreatedUser イベントを使用します。

于 2012-07-23T15:11:54.573 に答える
1

ソースMembership.GetUser メソッド (文字列)

指定されたユーザーを表す MembershipUser オブジェクト。username パラメーターが既存のユーザーに対応しない場合、このメソッドは null を返します。

User オブジェクトを null にチェックしてから、そのオブジェクトのプロパティにアクセスしてみてください。指定された名前のユーザーが存在しない場合、このメソッドは null を返します。OnFinishButtonClickメンバーシップからユーザーオブジェクトにアクセスできない場合は、コードをイベントに配置してみてください..

if( User != null)
{
  Object UserGUID= User.ProviderUserKey;
}
于 2012-07-23T15:12:26.770 に答える