相較於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;
}
}
}