• قسمت جستجو (داخل کنترلر) :
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 میفرسته ، پستهای تکراری توش نباشه
( البته میشه با کلیک روی کلیدواژه های نمایش داده شده زیر یه پست ، فقط پستای دارای اون کلیدواژه نشون داده شن. منتها میخوام بجای این کار درون هدر یا درون متن پستها ، سرچ کنه )
با آرزوی موفقیت برای کلیه کاربران گرامی
خوشحال میشدم پاسخ این تاپیک رو حتی در حد راهنمایی داده میشد.
با راه حل زیر درست شد ( البته قطعا روش بهتری هم میتونه باشه) :
با کد زیر در بخش کنترلر میشه لیستی از پستهایی ، به ویو فرستاده شه که توی عنوان یا متنشون یه سری کلیدواژه رو پیدا کرده باشه.
برای هایلایت کردن اونها در قسمت ویو ، میشه با استفاده از کد جاوااسکریپت اینکارو انجام داد
در نوار آدرس مرورگر : 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)); } }
هیچ کاربری تا کنون از این پست تشکر نکرده است
با ما تماس بگیرید تا در این مسیر همراهتان باشیم :)