Gravatar в ASP.Net WebForms, показывающий изображение по умолчанию

Я встроил AjaxToolKit Gravatar в цикл foreach комментария в блоге. Адрес электронной почты Gravatar не представляет фактическое значение адреса электронной почты, а представляет собой буквальную строку (синим шрифтом) CommentEmail. Я пробовал множество вариантов синтаксиса, но пока безуспешно. Вот код в его нынешнем виде:

<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> 

CommenterEmail в самой последней строке — это оскорбительный текст. Он отображается как строка с синим шрифтом, а не как переменная с черным шрифтом. Таким образом, он оценивается как недействительный адрес электронной почты и показывает значок «таинственный человек» по умолчанию. Если я жестко запрограммирую свой адрес электронной почты, он будет работать правильно, отображая мой Gravatar для всех пользователей.

Каков правильный синтаксис для встраивания этого значения электронной почты в AjaxToolKit: Gravatar?


person DJGray    schedule 13.11.2017    source источник


Ответы (1)


После двухнедельной борьбы с управлением Ajax Gravatar я пришел к выводу, что оно просто не работает для динамически генерируемого адреса электронной почты.

Я реализовал это следующим образом...

В аспксе:

<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. 
}

Блог Дэна

person DJGray    schedule 30.11.2017