PDA

View Full Version : سوال: جستجوی پیشرفته



mohammad.esi
پنج شنبه 03 تیر 1395, 22:10 عصر
دوستان من میخوام دیتابیس رو براساس فیلد هاش جستجو کنم به صورتی که در ابتدا یعنی وقتی ک کاربر هنوز جستجویی انجام نداده همه اطلاعات دیتابیس نشون داده بشه و با جستجو هم اطلاعاتی که کاربر جستجو کرده رو بهش نشون بده و نیازی به پر کردن همه تکس باکس ها برای جستجو نباشه
اکشن:
public ActionResult Index(int? width=4, string name=" ", string type=" ")
{
var data = db.Estates.Where(x =>
x.Owner_Name.Contains(name) && x.Alley_Width==width && x.Estate_Type==type ).ToList();
return View(data);

ویو:

<form action="@Url.Action("index","home")" method="post" enctype="multipart/form-data">
<input name="name" placeholder="ownername"/><br />
<input name="width" placeholder="alleywidth"/><br />
<input name="type" placeholder="estatetype" /><br />
<button>search...</button>
</form>

Moien Tajik
پنج شنبه 03 تیر 1395, 23:40 عصر
اگه سرچتون با " "=string name هستش به این صورت میشه :


public ActionResult Index(int? width=4, string name=" ", string type=" ")
{
var data = db.Estates.Where(x => name == null ||
x.Owner_Name.Contains(name) && x.Alley_Width==width && x.Estate_Type==type ).ToList();
return View(data);

mohammad.esi
جمعه 04 تیر 1395, 01:56 صبح
ممنون از راهنمایی تون دوست عزیز.تغییرش دادم ولی الان میتونم فقط دوتا احتمال رو بررسی کنم ،لطفا رهنمایی کنید public ActionResult Index(int width=0, string name="", string type="")
{
var data = (name == "" && width == 0 && type == "") ? db.Estates.ToList() :
db.Estates.Where(x => x.Owner_Name.Contains(name) && width == 0 && type == "").ToList();


return View(data);
}

adameh_bahal
جمعه 04 تیر 1395, 03:59 صبح
public ActionResult Index(int width = 0, string name = "", string type = "")
{
var data = db.Estates;
if (!string.IsNullOrWhiteSpace(name))
{
data.Where(x => x.Owner_Name.Contains(name));
}
if(!string.IsNullOrWhiteSpace(type))
{
data.Where(x => x.Type.Contains(type));
}
if (width!=0)
{
data.Where(x => x.Width==width);
}


return View(data.ToList());
}

mohammad.esi
جمعه 04 تیر 1395, 15:37 عصر
ممنونم دوست عزیز

mohammad.esi
جمعه 04 تیر 1395, 19:34 عصر
الان اینو توی ویو index نمایش میده اگه بخوام نتیجه جستجو توی یه ویو دیگه نشون داده بشه باید چکار کرد؟؟؟

Moien Tajik
جمعه 04 تیر 1395, 19:52 عصر
پاسش بدید به یک Partial view و اون Partial رو Return کنید و در هر View که میخواید نمایش داده بشه با Html.Partial نشون بدید :



return PartialView("_Search" , data);
@Html.Partial("_Search");

mohammad.esi
جمعه 04 تیر 1395, 21:26 عصر
ارور میده .بیشتر توضیح بدید

Moien Tajik
جمعه 04 تیر 1395, 22:36 عصر
در کنترلر :


public ActionResult Index(int width = 0, string name = "", string type = "")
{
var data = db.Estates;


// Data if searched
if (!string.IsNullOrWhiteSpace(name))
{
var name = data.Where(x => x.Owner_Name.Contains(name)).ToList();
return View("Search", name);
}
if (!string.IsNullOrWhiteSpace(type))
{
var type = data.Where(x => x.Type.Contains(type)).ToList();
return View("Search", type);
}
if (width != 0)
{
var width = data.Where(x => x.Width == width).ToList();
return View("Search", width);
}
// Default Data For Index
var list = db.Estates.ToList();
return View(list);
}



در ویوی Index :


@model IEnumerable<search.Models.Estates>
@{
ViewBag.Title = "Home Page";
}
<h1>Index</h1>


@{
<table class="table">
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Owner_Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Type)
</td>
<td>
@Html.DisplayFor(modelItem => item.Width)
</td>
</tr>
}
</table>
}


<form method="get">
<input type="search" name="name"/>
<input type="submit" value="Search" />
</form>



و در ویو Search :


@model IEnumerable<search.Models.Estates>


@{
ViewBag.Title = "Search";
}


<h2>Search</h2>


<table class="table">
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Owner_Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Type)
</td>
<td>
@Html.DisplayFor(modelItem => item.Width)
</td>
</tr>
}
</table>