Öncelikle View’da form oluşturmamız gerek. Çünkü arama
şartlarını bu form ile Controller’a ileteceğiz.
@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{}
Burada yazdığımız “Index” = Action
“Home” = Controller’ın
adı
Formmethod.Get ise; bu form ile yaptığımız işlemin bir “Get”
operasyonu olduğunu gösteriyor.
Arama şartlarını (Kişiye göre ara / Türe göre ara) Radio
Buttonlar aracılığıyla seçeceğiz.
@Html.RadioButton("SearchBy", "SearchByBook",
true); <text>
İsme Göre</text>
@Html.RadioButton("SearchBy", "SearchByRating") <text> Puana Göre</text>
@Html.RadioButton("SearchBy", "SearchByAuthor") <text> Yazara Göre</text>
@Html.RadioButton("SearchBy", "SearchByGender") <text>
Türe Göre</text>
RadioButton’un aldığı ilk parametre görüldüğü gibi
“SearchBy” olarak girildi. Yazdığımız
“SearchBy”, RadioButton’un ismidir. Bu ismi, Controller kısmında kullanacağız.
RadioButton’un ikinci parametresi de “SearchByBook”. Bu
parametre ile, kullanıcının neye göre arama yaptığını (isim,tür,puan vb) anlamış
olacağız. Bu arada üçüncü parametre olan “true” ise, bu Radiobutton’un otomatik
olarak seçili gelmesini sağlayacak.
Ve bir TextBox ve
“Ara” isminde bir button oluşturalım ve kullanıcının yazdığı veriyi
Server’a gönderelim.
@Html.TextBox("SearchTerm")
<input type="submit"
value="Ara!" class="buttonSearch" />
Görüleceği üzere; TextBox’un ismi “SearchTerm” olarak
girilmiştir. Bu ismi kullanarak, Controller kısmında, kullanıcının TextBox’a
yazdığı ve gönderdiği veriyi elde etmiş olacağız. Şimdi Controller kısmına
geçelim.
public ActionResult Index(string searchBy, string searchTerm)
{
if (searchBy == "SearchByBook")
{
Return View(_sampleContext.Books.Where(b
=> b.BookName.StartsWith(SearchTerm)).ToList)
….
Şimdi ise View ve Controller’da tam olarak ne olup bittiğini
anlayalım:
@Html.RadioButton("SearchBy", "SearchByBook", true);
Bu radiobutton un adı SearchBy,
değeri ise SearchByBook’tur.
Controller kısmında:
public ActionResult Index(string searchBy, string
searchTerm)
String SearchBy yazmıştık. Bu SearchBy parametresiyle; ismi
SearchBy olan buttonlarımızın “Value’sini alıyoruz” Örneğin bi üstteki
radiobutton’un değeri SearchByBook idi.. Yani kullanıcı eğer bu radiobutton’u
seçer ise şayet; biz controller’daki searchBy
parametremize SearcyByBook değerini
atamış oluruz. SearchBy parametresinde gerçekleşen işlem budur.
String SearchTerm ile ise; kullanıcının TextBox’a yazdığı
veriyi çekmiş olduk..
@Html.TextBox("SearchTerm")
Burada gerçekleşen işlem de aynı mantık ile ilerliyor. TextBox’un adını bildiğimiz üzere “SearchTerm” olarak girmiştik. Dolayısıyla kullanıcının TextBox’a yazmış olacağı herhangi bir kelime veya harfi; Controllerda bulunan String SearchTerm parametresine atamış olacağız.
public ActionResult Index(string searchBy, string
searchTerm)
Yani ne yapmış olduk? Kişinin neye göre arama yapacağını
(türe göre mi, isme göre mi, yoksa puana göre mi) SearchBy parametresine atmış olduk è
View kısmında radiobuttonların ismi SearcBy idi ve bu ismi kullanarak seçilen
RadioButton’un değerine ulaşmış olduk.
SearchTerm parametresine ise, yine aynı şekilde
kullanıcının, SearchTerm isimli
TextBox’a yazmış olduğu veriyi, yine Controller’da bulunan String
SearchTerm parametresine atamış olduk.
Ve bu parametrelere atanmış olan verileri elde ederek;
kullanıcının istediği şekilde olan arama sonuçlarını listeleterek kullanıcıya
sunmuş olduk.
Return View(_sampleContext.Books.Where(b
=> b.BookName.StartsWith(SearchTerm)).ToList)
Kodların derlenmiş hali:
VIEW:
@using (Html.BeginForm("Index", "Home", FormMethod.Get))
{
<b>Ara:   </b>
@Html.RadioButton("SearchBy", "SearchByBook", true); <text> İsme Göre</text>
@Html.RadioButton("SearchBy", "SearchByRating") <text> Puana Göre</text>
@Html.RadioButton("SearchBy", "SearchByAuthor") <text> Yazara Göre</text>
@Html.RadioButton("SearchBy", "SearchByGender") <text> Türe Göre</text>
<br />
@Html.TextBox("SearchTerm")
<input type="submit"
value="Ara!" class="buttonSearch" />
}
CONTROLLER:
public ActionResult Index(string searchBy, string searchTerm)
{
if (searchBy == "SearchByBook")
{
return View( "abc", _myLibraryContext.Books.Where(x=>x.BookName.StartsWith(searchTerm)).ToList());
}
if (searchBy == "SearchByRating")
{
return View("abc", _myLibraryContext.Books.Where(n => n.Rating.ToString() == searchTerm));
}
else
{
return View("abc", _myLibraryContext.Books.ToList());
}
}
Hiç yorum yok:
Yorum Gönder