2009-01-28 77 views
1

我已經創建了自定義的MembershipUser,MembershipProvider和RolePrivoder類。除了一件事之外,這些工作都很有效,我對此感到非常滿意。我在「用戶」表中有一個額外的字段。我有一個重寫的CreateUser()方法,它接受額外的變量並將其放入數據庫中。C#asp.net自定義MembershipUser.createUser()方法,從createuserwizard控件調用它

我的問題是,我希望能夠從創建用戶嚮導控件調用這個。我已經定製了控件,讓它有一個下拉框來填充我的額外字段。我用下面的代碼來存儲一塊信息,但我在如何我要麼使用的配置文件或撥打我的自定義CREATEUSER方法茫然:

// Create an empty Profile for the newly created user  
ProfileCommon p = (ProfileCommon)ProfileCommon.Create(CreateUserWizard1.UserName, true); 

// Populate some Profile properties off of the create user wizard 
p.CurrentLevel = Int32.Parse(((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("clevel")).SelectedValue); 

// Save profile - must be done since we explicitly created it 
p.Save(); 

謝謝你的任何和所有幫助

喬恩·霍金斯

回答

2

我認爲你的解決方案是你將得到的「最簡單」。你可以創建你自己的嚮導,並調用正確的方法,但這是更多的工作。

我唯一可以推薦的是使用OnCreatedUser事件。

參考:4guysfromrolla

+0

+1 - 處理停用事件聽起來像一個真正hacky的解決方法。我不確定事件的具體內容,因爲我不確定它來自哪個類,但是正常情況下,這是一種UI功能,您應該根據成員資格提供者的行爲來進行後期處理 – 2009-01-28 16:56:44

1

這是不是問題的答案,但我發現周圍的工作,還是想知道,如果有人能夠直接回答這個問題......

public void UpdateCurrentLvl_OnDeactivate(object sender, EventArgs e) 
{ 
    int level = Int32.Parse(((DropDownList)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("clevel")).SelectedValue); 
    MyMembershipUser myUser = (MyMembershipUser)Membership.GetUser(CreateUserWizard1.UserName); 
    myUser.CurrentLVL = level; 
    Membership.UpdateUser(myUser); 
} 

在我的冷杉t CreateUserWizardStep如果將上面的方法放在激活時禁用。至此它已將用戶插入到數據庫中,我可以將用戶取出,投射到我的MembershipUser類,設置變量和所有更新方法。

正如我所說,這是一個解決方法,我希望解決它,但它的工作。

謝謝

0

這也是令人難以置信的哈​​克,但如果我不得不做類似的事情過去,我剛剛把多餘的值到未使用的參數,如密碼重置問題或回答。雖然,我不完全確定你將如何使用嚮導來管理它。

這很醜陋,但只要它明確記錄(爲了安全起見,我會評論方法本身以及您引用它的任何地方),它會正常工作。

這比創建自己的嚮導的工作量少很多。