Orchard客製化:登入時提示使用者的部分信箱(Extension Method修訂版)

相較於Orchard客製化:登入時提示使用者的部分信箱一文的內容,直接將所有新增的程式碼嵌入原本的程式碼的private IUser ValidateLogOn(string userNameOrEmail, string password)函數之中,本文附加檔案的程式碼則進行下列修改:

相較於Orchard客製化:登入時提示使用者的部分信箱一文的內容,直接將所有新增的程式碼嵌入原本的程式碼的private IUser ValidateLogOn(string userNameOrEmail, string password)函數之中,本文附加檔案AccountController.zip的程式碼則進行下列修改:

1、將原本新增的程式碼獨立成為一個Extension Method,如同下文中綠色背景的程式碼。

2、於Orchard的Modules/Orchard.Users/Controllers/AccountController.cs匯入前述Extension Method的Namespace,如同下文中淡藍色背景的程式碼。

3、於Orchard的Modules/Orchard.Users/Controllers/AccountController.cs添加條件判斷式以利於使用者在登入時,僅輸入姓名,而未輸入電子郵件地址與密碼時,出現提示電子郵件地址的錯誤訊息。如同下文的黃色背景的程式碼。

倘若將關於Extension Method的程式碼獨立為單一檔案,搭配獨特的命名空間,將可以進一步降低模組之間的耦合性,以利降低維護成本,同時提高重複使用的價值。

擴充方法必須是static class,同時包含static method,在message signature中,傳入的第一個參數必須使用this加以修飾,被this和型別修飾的參數名稱代表呼叫此一擴充方法的物件。

using ExtensionMethods;

 

if ((!String.IsNullOrEmpty(userNameOrEmail)) && (String.IsNullOrEmpty(password)) && (!userNameOrEmail.Contains("@")))
{
IUser usr = _membershipService.GetUser(userNameOrEmail);

ModelState.AddModelError("userNameOrEmail", T("Your e-mail is " + usr.Email.GetPartialEMail() + "."));
validate = false;
}

 

namespace ExtensionMethods
{
public static class StringExtensions
{
public static string GetPartialEMail(this string str)
{
string strPartialEMail = str.Substring(0, 1);

int intIndexOfAt = str.IndexOf("@");

for (int i = 1; i < intIndexOfAt; i++)
strPartialEMail = strPartialEMail + "*";

strPartialEMail = strPartialEMail + "@";

strPartialEMail = strPartialEMail + str.Substring(intIndexOfAt + 1, str.Length - intIndexOfAt - 1);

return strPartialEMail;
}
}
}