مرجع تخصصی برنامه نویسان

انجمن تخصصی برنامه نویسان فارسی زبان

کاربر سایت

بهزاد علیزاده

عضویت از 1392/08/28

جستجوی "چندین کلمه" در هدر/یا متن پستها و هایلایت کردن نتیجه جستجو

  • سه شنبه 20 آبان 1393
  • 18:47
تشکر میکنم

 

 

• قسمت جستجو (داخل کنترلر) :

 public class SearchController : Controller
    {
        DB_PCEntities db = new DB_PCEntities();

        // GET: Search/GetPagesBySearch/2
        [Route("Tags/{searchTest}")]
        public ActionResult GetPagesBySearch(string searchTest)
        {
            var pages = db.Pages.AsQueryable();

            string[] keys = searchTest.Split('-');

            foreach (var key in keys)
            {
                string tag = key;
                pages = pages.Where(p => p.Title.Contains(tag) || p.ShortText.Contains(tag) || p.Text.Contains(tag));
            }
            var result = pages.ToList();

            return View(result);
        }
    }

• قسمت هایلایت کردن اون کلمه ها :

قصد دارم وقتی نتیجه (لیستی از پستها) به view داده شد ، با استفاده از جاوااسکریپت این عمل انجام بشه. این قسمت کاری نداره. سوالم رو قسمت اول هست

----------------------------------------------------------------------------------------

سوالم روی قسمت اول هست ،

توی نوار آدرس : ..../Tags/کلمه1-کلمه2

برای یک کلمه رو جواب میده ولی برای چندتا کلمه نتیجه هیچی.

یعنی میاد اول پستهایی که در هدر یا متنشون "کلمه1" هست رو پیدا میکنه ،

در مرحله بعد میاد توی (این پستهای پیدا شده) "کلمه2" رو سرچ میگرده نه همه پستهای جدول.(ایرادش اینه) اونوقت اگه "کلمه2" توشون نباشه ، نتیجه میشه : هیچ پستی یافت نشد

 

-----------------------------------------------------

اصل قضیه اینجاست که اگه برای "کلمه2" بیاد دوباره از بین کل پستهای جدول سرچ کنه و نتیجه رو توی pages= اضافه کنه ، ممکنه پستهای تکراری داخلش باشه

اگه این کارو کنیم ، راه حل چی میتونه باشه که وقتی داره نتیجه(لیستی از پستها) رو به view میفرسته ، پستهای تکراری توش نباشه

 

 

( البته میشه با کلیک روی کلیدواژه های نمایش داده شده زیر یه پست ، فقط پستای دارای اون کلیدواژه نشون داده شن. منتها میخوام بجای این کار درون هدر یا درون متن پستها ، سرچ کنه )

پاسخ های این پرسش

تعداد پاسخ ها : 1 پاسخ
کاربر سایت

بهزاد علیزاده

عضویت از 1392/08/28

  • چهارشنبه 21 آبان 1393
  • 15:29

 

با آرزوی موفقیت برای کلیه کاربران گرامی

خوشحال میشدم پاسخ این تاپیک رو حتی در حد راهنمایی داده میشد.

 

 

با راه حل زیر درست شد ( البته قطعا روش بهتری هم میتونه باشه) :

 

با کد زیر در بخش کنترلر میشه لیستی از پستهایی ، به ویو فرستاده شه که توی عنوان یا متنشون یه سری کلیدواژه رو پیدا کرده باشه.

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

 

در نوار آدرس مرورگر : localhost:7519/tags/طراحی سایت-sqlserver-طراحی پایگاه داده

 

public class SearchController : Controller
    {
        DB_PCEntities db = new DB_PCEntities();

        // GET: Search/GetPagesBySearch/2
        [Route("Tags/{searchText}")]
        public ActionResult GetPagesBySearch(string searchText)
        {
            searchText = searchText.Replace("--", "-");
            //جداکردن تگها
            string[] keys = searchText.Split('-');
            
            
            
            var pages = db.Pages.AsQueryable();

            //لیستی که در آن، در هر بار جستجوی تگ، لیستی از پستها قرار میگیره
            List<List<Pages>> result = new List<List<Pages>>();
            //جستجوی تگها در هدر/یا متن پستها
            foreach (var key in keys)
            {                
                result.Add(pages.Where(p => p.Title.Contains(key)
                                            || p.ShortText.Contains(key)
                                            || p.Text.Contains(key)).ToList());
            }

            var r = new List<Pages>();
            foreach (var list in result)
            {
                r.AddRange(list);
            }

            ViewBag.Text = searchText;
            //فرستادن لیستی از پستهای(غیر تکراری) به ویو 
            //و مرتب بر اساس جدیدترین تاریخ درج
            return View(r.DistinctBy(p => p.PageID).OrderByDescending(p => p.CreateDate));
        }
    }

 

 

 

 

کاربرانی که از این پست تشکر کرده اند

هیچ کاربری تا کنون از این پست تشکر نکرده است

اگر نیاز به یک مشاور در زمینه طراحی سایت ، برنامه نویسی و بازاریابی الکترونیکی دارید

با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)