برجسته کردن کلمات کلیدی در نتایج جستجو توسط Asp.Net

شنبه 11 مهر 1394

در این مقاله قصد داریم که نحوه ی برجسته کردن کلمات کلیدی پیدا شده ،در نتایج جستجو را توضیح دهیم، در اینجا به یک Extention Method نیاز داریم که جزئیی از کلمات یا تمامی از کلمات را به صورت برجسته نمایش می دهد.

برجسته کردن کلمات کلیدی در نتایج جستجو توسط Asp.Net

یک کلاس می سازید و متد زیر را در داخل کلاس می نویسید:

/// <summary>
/// Wraps matched strings in HTML span elements styled with a background-color
/// </summary>
/// <param name="text"></param>
/// <param name="keywords">Comma-separated list of strings to be highlighted</param>
/// <param name="cssClass">The Css color to apply</param>
/// <param name="fullMatch">false for returning all matches, true for whole word matches only</param>
/// <returns>string</returns>
public static string HighlightKeyWords(this string text, string keywords, string cssClass, bool fullMatch)
{
  if (text == String.Empty || keywords == String.Empty || cssClass == String.Empty)
    return text;
  var words = keywords.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
  if (!fullMatch)
    return words.Select(word => word.Trim()).Aggregate(text,
                 (current, pattern) =>
                 Regex.Replace(current, 
                                 pattern,
                                   string.Format("<span style=\"background-color:{0}\">{1}</span>", 
                                   cssClass, 
                                   "$0"),
                                   RegexOptions.IgnoreCase));
  return words.Select(word => "\\b" + word.Trim() + "\\b")
              .Aggregate(text,(current, pattern) => 
                        Regex.Replace(current, 
                        pattern,
                          string.Format("<span style=\"background-color:{0}\">{1}</span>", 
                          cssClass, 
                          "$0"),                                           
                          RegexOptions.IgnoreCase));

}

حتما داخل کلاس NameSpace زیر را بنویسید:

System.Text.RegularExpressions
 

یک WebForm جدید می سازید و داخل DesignUI قطعه کد زیر را می نویسید:

  <div>
 
           <p class="p1">
               <asp:Literal Text="برنامه نویسان" runat="server" ID="LIT1"  />    
           </p> 
           <p id="p2">
               <asp:Label ID="Label1" runat="server" Text=""></asp:Label>
           </p>
          
           <asp:TextBox runat="server" ID="txt" />
           <asp:Button Text="جستجو" runat="server" ID="btnsearch" OnClick="btnsearch_Click" />
       </div>

داخل CodeBehind هم قطعه کد زیر را برای Event دکمه می نویسید:

    protected void btnsearch_Click(object sender, EventArgs e)
        {
           Label1.Text = LIT1.Text.ToString().HighlightKeyWords(txt.Text, false, "yellow");
            

        }

زمانی که اجرا بگیرید با نوشتن کلمه داخل TextBox و با زدن Button روی کلمه ی نوشته شده Highlight

می شود.

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید