2009-06-16 44 views
3

我從URL獲取用戶名blah.com/kevinuk。Membership.GetUser(用戶名) - 如何返回正確的框?

我想在頁面上的一些內容說KevinUK這是什麼存儲在會員表,但是當我這樣做時,它返回相同的外殼什麼的輸入了。

MembershipUser member = Membership.GetUser(user); 
string userName = member.UserName; 

如何使用小寫的用戶名作爲參數,並使用正確的外殼從數據庫返回值?

回答

1

目前尚不清楚,你所使用的會員供應商,但你可以很容易地從下降並重寫的getUser方法。

創建一個類的MembershipProvider類繼承的類。

public class MyMembershipProvider : MembershipProvider 

{ 

    public MyMembershipProvider() 

    { 

     // 

     // TODO: Add constructor logic here 

     // 

    } 

} 

重寫getUser方法。

public override MembershipUser GetUser(string username, bool userIsOnline) 

{ 
... Logic here to do a case insensitive lookup... 

} 

最後更新web配置要使用新的供應商:

<system.web> 
    <membership defaultProvider="MyMembershipProvider" userIsOnlineTimeWindow="10"> 
     <providers> 
      <add name="MyMembershipProvider" type="Providers.FIFAMembershipProvider"  connectionStringName="ADConnectionString" ... /> 
     </providers> 
    </membership> 
</system.web> 

一些例子:

http://www.eggheadcafe.com/tutorials/aspnet/30c3a27d-89ff-4f87-9762-37431805ef81/aspnet-custom-membership.aspx

http://msdn.microsoft.com/en-us/library/ms366730(VS.80).aspx

2

不幸的是,Membership.GetUser(string username)方法只是簡單地將MembershipUser的用戶名設置爲傳遞參數的值。爲了得到正確的外殼,你要麼需要使用Membership.GetUser(object providerUserKey),這需要用戶的GUID,或覆蓋前一種方法及其相應的存儲過程返回正確-套管的用戶名。

或者,你可以簡單地補回來到後端調用兩種不同GetUser()方法,但是這是非常浪費的。

0

Stumpled對同樣的問題,上述嘗試解決方案=獲得正確的最簡單方法殼體:

var user = Membership.GetUser(userName.Text); 
user = Membership.GetUser(user.ProviderUserKey); 
var correctCasing = user.UserName; 
相關問題