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中有一些额外的步骤,在完成表单后,它会将用户信息存储在数据库中。但是发生了这个错误:
Object reference not set to an instance of an object.
我还设置了一个断点来链接55,57,59。而且从第57行开始,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();
}
}
答案 0 :(得分:1)
虽然此方法名称为“CreateUserWizard1_CreatedUser”,但由于其签名,我可以看到它是针对CreatingUser事件的。在此事件期间尚未创建用户。使用CreatedUser事件。
答案 1 :(得分:1)
来源Membership.GetUser Method (String)
表示指定用户的MembershipUser对象。如果 username参数与现有用户不对应 method返回null。
将User对象检查为null,然后尝试访问该对象的属性。如果没有具有指定名称的此类用户,则此方法返回null。尝试将您的代码放在OnFinishButtonClick
事件上,如果您无法从成员资格中访问用户对象,希望这对您有用..
if( User != null)
{
Object UserGUID= User.ProviderUserKey;
}