我创建了一个自定义成员资格提供程序,其自定义CreateUser方法接受另一个参数,如下所示:
public class CustomMembershipProvider : MembershipProvider
{
// code
public override MembershipUser CreateUser(string username,
string password, etc...)
{
// does nothing
}
public MembershipUser MyCreateUser(string username,string password,string COMPANY, etc...)
{
// validades the fields and inserts the user in the db
}
}
现在我想使用“创建用户向导”控件来插入具有该额外字段的用户。 我已将控件扩展为类似的内容:
public class CustomCreateUser : CreateUserWizard
{
public CustomCreateUser(): base()
{
}
protected override void OnCreatingUser(LoginCancelEventArgs e)
{
MembershipUser newUser = ((CustomMembershipProvider)Membership.Provider).MyCreateUser(username,password,company, etc...)
}
}
问题是,在调用此OnCreatingUser之后,控件在内部调用提供程序的默认CreateUser(无效的方法)方法,因为用户已插入而引发错误...
可以通过覆盖CustomCreateUser中的方法来阻止第二次调用吗?
提前致谢
答案 0 :(得分:0)
这有点像hacky,但你可以做到以下几点:
protected override void OnCreatingUser(LoginCancelEventArgs e)
{
MembershipUser newUser = ((CustomMembershipProvider)Membership.Provider).MyCreateUser(username,password,company, etc...)
e.Cancel = true;
}
AttemptCreateUser代码内部
private bool AttemptCreateUser()
{
if ((this.Page == null) || this.Page.IsValid)
{
MembershipCreateStatus status;
LoginCancelEventArgs e = new LoginCancelEventArgs();
this.OnCreatingUser(e);
if (e.Cancel)
{
return false;
}
....More code...
这应该覆盖AttemptCreateUser的默认行为,因为它将返回false。 这是未经测试的,但在将LoginControl与自定义安全提供程序一起使用时,我使用了类似的方法。