2017-11-13 8 views
0

블로그에 foreach 루프에 AjaxToolKit Gravatar를 포함 시켰습니다. Gravatar의 전자 메일 주소는 전자 메일 주소의 실제 값을 나타내는 것이 아니라 문자 그대로의 문자열 (파란색 글꼴) CommentEmail입니다. 나는 많은 성공한 구문 옵션을 시도했다. 다음은 코드를 나타냅니다.Gravatar in ASP.Net WebForms 기본 이미지 표시

<div class="comments"> 
    <div> 
     <h3>Comments</h3> 
    </div> 

     <% foreach (System.Data.DataRow myCRow in myCommentDataTable.Rows) 
      { 
       string CommentID = myCRow[0].ToString(); 
       string BlogParentID = myCRow[1].ToString(); 
       string Commenter = myCRow[2].ToString(); 
       string CommenterEmail = myCRow[3].ToString(); 
       string Comment = myCRow[4].ToString(); 
       string CommentDate = myCRow[5].ToString(); 
       if (BlogParentID == Id) 
       { 
        Response.Write("<div class='commentdate pull-right'>" + CommentDate + "</div>"); 
        Response.Write("<div class='commenter'>" + Commenter + "</div><br />"); 
        Response.Write("<p>" + Comment + "</p>"); 
        %><Ajax:Gravatar runat='server' ID='GravatarImage' Email='<%= CommenterEmail %> ' DefaultImageBehavior='MysteryMan' /><br /><br /><% 
       } 
      }%> 
</div> 

Commenter 마지막 ​​줄에있는 메일이 문제의 텍스트입니다. 검은 글꼴로 된 변수보다는 파란색 글꼴로 표시됩니다. 그래서 그것은 유효하지 않은 이메일 주소로 평가되고 기본 "myster man"아이콘을 보여줍니다. 내 전자 메일 주소를 하드 코드하면 모든 사용자에 대해 내 Gravatar를 표시하면서 제대로 작동합니다.

AjaxToolKit : Gravatar에 이메일 값을 삽입하기위한 올바른 구문은 무엇입니까?

답변

0

Ajax Gravatar 컨트롤로 2 주간의 전투 끝에 동적으로 생성 된 이메일 주소로는 작동하지 않는다는 결론에 도달했습니다. 다음과 같이 내가 그것을 구현 한

... 영문에서

: 코드 숨김에서

<div class="comments"> 
    <div> 
     <h3>Comments</h3> 
    </div> 
     <% 
      foreach (System.Data.DataRow myCRow in myCommentDataTable.Rows) 
      { 
       string CommentID = myCRow[0].ToString(); 
       string BlogParentID = myCRow[1].ToString(); 
       string Commenter = myCRow[2].ToString(); 
       string CommenterEmail = myCRow[3].ToString().ToLower().Trim(); 
       string Comment = myCRow[4].ToString(); 
       string CommentDate = myCRow[5].ToString(); 

       if (BlogParentID == Id) 
       { 
        // Compute the hash 
        string hash = HashEmailForGravatar(CommenterEmail); 
        // Assemble the url and return 
        string myGravatar = string.Format("http://www.gravatar.com/avatar/{0}?size=50", hash); 
        Response.Write("<div class='commentdate pull-right'>" + CommentDate + "</div>"); 
        Response.Write("<div class='commenter'>"); 
        Response.Write("<img src='" + myGravatar + "' alt='" + Commenter + "' />&nbsp;&nbsp;"); 
        Response.Write(Commenter + "</div>"); 
        Response.Write("<p>" + Comment + "</p>"); 

       } 
      }%> 
</div> 

:

public static string HashEmailForGravatar(string email) 
{ 
    // Create a new instance of the MD5CryptoServiceProvider object. 
    MD5 md5Hasher = MD5.Create(); 

    // Convert the input string to a byte array and compute the hash. 
    byte[] data = md5Hasher.ComputeHash(System.Text.Encoding.Default.GetBytes(email)); 

    // Create a new Stringbuilder to collect the bytes 
    // and create a string. 
    System.Text.StringBuilder sBuilder = new System.Text.StringBuilder(); 

    // Loop through each byte of the hashed data 
    // and format each one as a hexadecimal string. 
    for (int i = 0; i < data.Length; i++) 
    { 
     sBuilder.Append(data[i].ToString("x2")); 
    } 

    return sBuilder.ToString(); // Return the hexadecimal string. 
} 

Dan's Blog