Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
tarafından Rick Anderson
Not
Bu öğreticinin ASP.NET MVC 5 ve Visual Studio 2013 kullanan güncelleştirilmiş bir sürümü burada sağlanır. Daha güvenlidir, takip etmek çok daha kolaydır ve daha fazla özellik gösterir.
Bu bölümde, film denetleyicisi için oluşturulan eylem yöntemlerini ve görünümlerini inceleyeceksiniz. Ardından özel bir arama sayfası ekleyeceksiniz.
Uygulamayı çalıştırın ve tarayıcınızın Movies adres çubuğundaKI URL'ye /Filmler'i ekleyerek denetleyiciye göz atın. Bağlandığını URL'yi görmek için fare işaretçisini Düzenle bağlantısının üzerinde tutun.

Düzenle bağlantısı Views\Movies\Index.cshtml görünümünde yöntemi tarafından Html.ActionLink oluşturuldu:
@Html.ActionLink("Edit", "Edit", new { id=item.ID })

Html nesnesi, System.Web.Mvc.WebViewPage temel sınıfındaki bir özellik kullanılarak kullanıma sunulan bir yardımcıdır. ActionLink Yardımcının yöntemi, denetleyicilerdeki eylem yöntemlerine bağlanan HTML köprülerini dinamik olarak oluşturmayı kolaylaştırır. yönteminin ActionLink ilk bağımsız değişkeni, işlenmek üzere bağlantı metnidir (örneğin, <a>Edit Me</a>). İkinci bağımsız değişken, çağrılacak eylem yönteminin adıdır. Son bağımsız değişken, yol verilerini oluşturan anonim bir nesnedir (bu örnekte 4 kimliği).
Önceki görüntüde gösterilen oluşturulan bağlantı şeklindedir http://localhost:xxxxx/Movies/Edit/4. Varsayılan yol (App_Start\RouteConfig.cs'da kurulan) URL desenini {controller}/{action}/{id}alır. Bu nedenle, ASP.NET parametresi 4'e Edit eşit olan denetleyicinin Movies eylem yöntemine bir isteğe çevrilirhttp://localhost:xxxxx/Movies/Edit/4.ID App_Start\RouteConfig.cs dosyasından aşağıdaki kodu inceleyin.
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index",
id = UrlParameter.Optional }
);
}
Sorgu dizesini kullanarak eylem yöntemi parametrelerini de geçirebilirsiniz. Örneğin, URL http://localhost:xxxxx/Movies/Edit?ID=4 ayrıca 4 parametresini ID denetleyicinin Edit eylem yöntemine Movies geçirir.

Denetleyiciyi Movies açın. İki Edit eylem yöntemi aşağıda gösterilmiştir.
//
// GET: /Movies/Edit/5
public ActionResult Edit(int id = 0)
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
//
// POST: /Movies/Edit/5
[HttpPost]
public ActionResult Edit(Movie movie)
{
if (ModelState.IsValid)
{
db.Entry(movie).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}
İkinci Edit eylem yönteminin önünde özniteliğinin HttpPost olduğuna dikkat edin. Bu öznitelik, yöntemin aşırı yüklemesinin Edit yalnızca POST istekleri için çağrılabileceğini belirtir. özniteliğini HttpGet ilk düzenleme yöntemine uygulayabilirsiniz, ancak varsayılan olduğu için bu gerekli değildir. (Özniteliği örtük olarak yöntem olarak HttpGet atanmış eylem yöntemlerine HttpGet başvuracağız.)
HttpGet Edit yöntemi film kimliği parametresini alır, Entity Framework Find yöntemini kullanarak filmi arar ve seçili filmi Düzenle görünümüne döndürür. Id parametresi, yöntem parametresiz çağrılırsa Edit sıfır varsayılan değerini belirtir. Bir film bulunamazsa HttpNotFound döndürülür. yapı iskelesi sistemi Düzenleme görünümünü oluşturduğunda sınıfını inceledi ve sınıfın Movie her özelliği için ve <input> öğelerini işlemek <label> için kod oluşturdu. Aşağıdaki örnek, oluşturulan Düzenleme görünümünü gösterir:
@model MvcMovie.Models.Movie
@{
ViewBag.Title = "Edit";
}
<h2>Edit</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Movie</legend>
@Html.HiddenFor(model => model.ID)
<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.ReleaseDate)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.ReleaseDate)
@Html.ValidationMessageFor(model => model.ReleaseDate)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Genre)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Genre)
@Html.ValidationMessageFor(model => model.Genre)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Price)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Price)
@Html.ValidationMessageFor(model => model.Price)
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
Görünüm şablonunun dosyanın en üstünde bir @model MvcMovie.Models.Movie deyimi olduğuna dikkat edin; bu, görünümün görünüm şablonu için modelin türünde Movieolmasını beklediğini belirtir.
yapı iskelesi oluşturulmuş kod, HTML işaretlemesini kolaylaştırmak için çeşitli yardımcı yöntemler kullanır. Yardımcı, Html.LabelFor alanın adını ("Title", "ReleaseDate", "Genre" veya "Price") görüntüler. Yardımcı Html.EditorFor bir HTML <input> öğesi işler. Yardımcı, Html.ValidationMessageFor bu özellik ile ilişkili tüm doğrulama iletilerini görüntüler.
Uygulamayı çalıştırın ve /Filmler URL'sine gidin. Düzenle bağlantısına tıklayın. Tarayıcıda sayfanın kaynağını görüntüleyin. Form öğesinin HTML'i aşağıda gösterilmiştir.
<form action="/Movies/Edit/4" method="post"> <fieldset>
<legend>Movie</legend>
<input data-val="true" data-val-number="The field ID must be a number." data-val-required="The ID field is required." id="ID" name="ID" type="hidden" value="4" />
<div class="editor-label">
<label for="Title">Title</label>
</div>
<div class="editor-field">
<input class="text-box single-line" id="Title" name="Title" type="text" value="Rio Bravo" />
<span class="field-validation-valid" data-valmsg-for="Title" data-valmsg-replace="true"></span>
</div>
<div class="editor-label">
<label for="ReleaseDate">ReleaseDate</label>
</div>
<div class="editor-field">
<input class="text-box single-line" data-val="true" data-val-date="The field ReleaseDate must be a date." data-val-required="The ReleaseDate field is required." id="ReleaseDate" name="ReleaseDate" type="text" value="4/15/1959 12:00:00 AM" />
<span class="field-validation-valid" data-valmsg-for="ReleaseDate" data-valmsg-replace="true"></span>
</div>
<div class="editor-label">
<label for="Genre">Genre</label>
</div>
<div class="editor-field">
<input class="text-box single-line" id="Genre" name="Genre" type="text" value="Western" />
<span class="field-validation-valid" data-valmsg-for="Genre" data-valmsg-replace="true"></span>
</div>
<div class="editor-label">
<label for="Price">Price</label>
</div>
<div class="editor-field">
<input class="text-box single-line" data-val="true" data-val-number="The field Price must be a number." data-val-required="The Price field is required." id="Price" name="Price" type="text" value="2.99" />
<span class="field-validation-valid" data-valmsg-for="Price" data-valmsg-replace="true"></span>
</div>
<p>
<input type="submit" value="Save" />
</p>
</fieldset>
</form>
Öğeler<input>, özniteliği /Movies/Edit URL'sine gönderi olarak ayarlanmış bir HTML <form> öğesindedir action . Düzenle düğmesine tıklandığında form verileri sunucuya gönderilir.
POST İsteğini İşleme
Aşağıdaki listede eylem yönteminin Edit sürümü gösterilmektedirHttpPost.
[HttpPost]
public ActionResult Edit(Movie movie)
{
if (ModelState.IsValid)
{
db.Entry(movie).State = EntityState.Modified;
db.SaveChanges();
return RedirectToAction("Index");
}
return View(movie);
}
ASP.NET MVC model bağlayıcısı, gönderilen form değerlerini alır ve parametre olarak movie geçirilen bir Movie nesne oluşturur. yöntemi, ModelState.IsValid formda gönderilen verilerin bir Movie nesneyi değiştirmek (düzenlemek veya güncelleştirmek) için kullanılabileceğini doğrular. Veriler geçerliyse, film verileri örneğin koleksiyonuna Movies db(MovieDBContext kaydedilir). Yeni film verileri, yöntemini MovieDBContextçağırarak SaveChanges veritabanına kaydedilir. Kod, verileri kaydettikten sonra kullanıcıyı Index , yeni yapılan değişiklikler de dahil olmak üzere film koleksiyonunu görüntüleyen sınıfının eylem yöntemine MoviesController yönlendirir.
Postalanan değerler geçerli değilse, formda yeniden görüntülenir. Html.ValidationMessageFor Edit.cshtml görünüm şablonundaki yardımcılar uygun hata iletilerinin görüntülenmesini sağlar.

Not
ondalık ayırıcı için virgül (",") kullanan İngilizce olmayan yerel ayarlar için jQuery doğrulamasını desteklemek için, kullanmak Globalize.parseFloatüzere globalize.js ve belirli kültürlerinizi/globalize.cultures.js dosyanızı(kimden https://github.com/jquery/globalize ) ve JavaScript'i eklemeniz gerekir. Aşağıdaki kod, Views\Movies\Edit.cshtml dosyasında "fr-FR" kültürüyle çalışacak değişiklikleri gösterir:
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
<script src="~/Scripts/globalize.js"></script>
<script src="~/Scripts/globalize.culture.fr-FR.js"></script>
<script>
$.validator.methods.number = function (value, element) {
return this.optional(element) ||
!isNaN(Globalize.parseFloat(value));
}
$(document).ready(function () {
Globalize.culture('fr-FR');
});
</script>
<script>
jQuery.extend(jQuery.validator.methods, {
range: function (value, element, param) {
//Use the Globalization plugin to parse the value
var val = $.global.parseFloat(value);
return this.optional(element) || (
val >= param[0] && val <= param[1]);
}
});
</script>
}
Ondalık alanı ondalık ayırıcı değil virgül gerektirebilir. Geçici bir düzeltme olarak, projelerin kök web.config dosyasına genelleştirme öğesini ekleyebilirsiniz. Aşağıdaki kod, kültürü İngilizce Birleşik Devletler olarak ayarlanmış genelleştirme öğesini gösterir.
<system.web>
<globalization culture ="en-US" />
<!--elements removed for clarity-->
</system.web>
HttpGet Tüm yöntemler benzer bir desen izler. Bir film nesnesi (veya nesne Indexlistesi) alır ve modeli görünüme geçirir. yöntemi, Create boş bir film nesnesini Oluştur görünümüne geçirir. Verileri oluşturan, düzenleyen, silecek veya başka bir şekilde değiştiren tüm yöntemler, yöntemin HttpPost aşırı yüklemesinde bunu yapar. HTTP GET yöntemindeki verileri değiştirmek bir güvenlik riskidir. GET yöntemindeki verilerin değiştirilmesi, HTTP en iyi yöntemlerini ve GET isteklerinin uygulamanızın durumunu değiştirmemesi gerektiğini belirten mimari REST desenini de ihlal eder. Başka bir deyişle, GET işleminin gerçekleştirilmesi, yan etkisi olmayan ve kalıcı verilerinizi değiştirmeyen güvenli bir işlem olmalıdır.
Arama Yöntemi ve Arama Görünümü Ekleme
Bu bölümde, filmleri türe veya ada göre aramanıza olanak tanıyan bir SearchIndex eylem yöntemi ekleyeceksiniz. Bu, /Movies/SearchIndex URL'si kullanılarak kullanılabilir. İstek, kullanıcının film aramak için girebileceği giriş öğelerini içeren bir HTML formu görüntüler. Kullanıcı formu gönderdiğinde, eylem yöntemi kullanıcı tarafından gönderilen arama değerlerini alır ve veritabanında arama yapmak için değerleri kullanır.
SearchIndex Formunu Görüntüleme
Mevcut MoviesController sınıfa bir SearchIndex eylem yöntemi ekleyerek başlayın. yöntemi, HTML formu içeren bir görünüm döndürür. Kod şu şekildedir:
public ActionResult SearchIndex(string searchString)
{
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
Yöntemin SearchIndex ilk satırı, filmleri seçmek için aşağıdaki LINQ sorgusunu oluşturur:
var movies = from m in db.Movies
select m;
Sorgu bu noktada tanımlanır, ancak henüz veri deposunda çalıştırılmamıştır.
searchString Parametresi bir dize içeriyorsa, filmler sorgusu arama dizesinin değerine göre filtre uygulamak için aşağıdaki kod kullanılarak değiştirilir:
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
s => s.Title Yukarıdaki kod bir Lambda İfadesi'dir. Lambdalar yöntem tabanlı LINQ sorgularında yukarıdaki kodda kullanılan Where yöntemi gibi standart sorgu işleci yöntemlerinin bağımsız değişkenleri olarak kullanılır. LINQ sorguları tanımlandığında veya veya OrderBygibi Where bir yöntem çağrılarak değiştirildiğinde yürütülür. Bunun yerine sorgu yürütme ertelenir; başka bir deyişle, bir ifadenin değerlendirmesi, gerçekleştirilen değeri gerçekten yinelenene veya yöntemi çağrılana ToList kadar geciktirilir. SearchIndex Örnekte sorgu SearchIndex görünümünde yürütülür. Ertelenen sorgu yürütme hakkında daha fazla bilgi için bkz . Sorgu Yürütme.
Artık formu kullanıcıya görüntüleyecek görünümü uygulayabilirsiniz SearchIndex . Yöntemin SearchIndex içine sağ tıklayın ve ardından Görünüm Ekle'ye tıklayın. Görünüm Ekle iletişim kutusunda, bir Movie nesneyi görünüm şablonuna model sınıfı olarak geçireceğinizi belirtin. İskele şablonu listesinde Liste'yi seçin ve Ekle'ye tıklayın.

Ekle düğmesine tıkladığınızda Views\Movies\SearchIndex.cshtml görünüm şablonu oluşturulur. yapı iskelesi şablon listesinde Liste'yi seçtiğinizden, Visual Studio görünümde otomatik olarak bazı varsayılan işaretlemeler oluşturdu (iskelesi oluşturuldu). yapı iskelesi bir HTML formu oluşturdu. sınıfını inceledi ve sınıfın Movie her özelliği için öğeleri işlemek <label> için kod oluşturdu. Aşağıdaki liste, oluşturulan Oluştur görünümünü gösterir:
@model IEnumerable<MvcMovie.Models.Movie>
@{
ViewBag.Title = "SearchIndex";
}
<h2>SearchIndex</h2>
<p>
@Html.ActionLink("Create New", "Create")
</p>
<table>
<tr>
<th>
Title
</th>
<th>
ReleaseDate
</th>
<th>
Genre
</th>
<th>
Price
</th>
<th></th>
</tr>
@foreach (var item in Model) {
<tr>
<td>
@Html.DisplayFor(modelItem => item.Title)
</td>
<td>
@Html.DisplayFor(modelItem => item.ReleaseDate)
</td>
<td>
@Html.DisplayFor(modelItem => item.Genre)
</td>
<td>
@Html.DisplayFor(modelItem => item.Price)
</td>
<td>
@Html.ActionLink("Edit", "Edit", new { id=item.ID }) |
@Html.ActionLink("Details", "Details", new { id=item.ID }) |
@Html.ActionLink("Delete", "Delete", new { id=item.ID })
</td>
</tr>
}
</table>
Uygulamayı çalıştırın ve /Movies/SearchIndex konumuna gidin. GIBI ?searchString=ghost bir sorgu dizesini URL'ye ekleyin. Filtrelenen filmler görüntülenir.

yönteminin imzasını SearchIndex adlı idid bir parametreye sahip olacak şekilde değiştirirseniz, parametre Global.asax dosyasında ayarlanan varsayılan yolların yer tutucusuyla eşleşecektir{id}.
{controller}/{action}/{id}
Özgün SearchIndex yöntem şu şekilde görünür:
public ActionResult SearchIndex(string searchString)
{
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
Değiştirilen SearchIndex yöntem aşağıdaki gibi görünür:
public ActionResult SearchIndex(string id)
{
string searchString = id;
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
Artık arama başlığını sorgu dizesi değeri yerine yönlendirme verileri (URL segmenti) olarak geçirebilirsiniz.

Ancak, kullanıcıların bir film için her arama yapmak istediklerinde URL'yi değiştirmelerini bekleyemezsiniz. Şimdi filmleri filtrelemelerine yardımcı olmak için kullanıcı arabirimi ekleyeceksiniz. Yöntemin imzasını rotaya bağlı kimlik parametresinin SearchIndex nasıl geçirildiğini test etmek için değiştirdiyseniz, yönteminizin SearchIndex adlı searchStringbir dize parametresi alması için bu parametreyi geri değiştirin:
public ActionResult SearchIndex(string searchString)
{
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
return View(movies);
}
Views\Movies\SearchIndex.cshtml dosyasını açın ve hemen arkasına @Html.ActionLink("Create New", "Create")aşağıdakileri ekleyin:
@using (Html.BeginForm()){
<p> Title: @Html.TextBox("SearchString")<br />
<input type="submit" value="Filter" /></p>
}
Aşağıdaki örnekte Views\Movies\SearchIndex.cshtml dosyasının eklenen filtreleme işaretlemesiyle bir bölümü gösterilmektedir.
@model IEnumerable<MvcMovie.Models.Movie>
@{
ViewBag.Title = "SearchIndex";
}
<h2>SearchIndex</h2>
<p>
@Html.ActionLink("Create New", "Create")
@using (Html.BeginForm()){
<p> Title: @Html.TextBox("SearchString") <br />
<input type="submit" value="Filter" /></p>
}
</p>
Yardımcı Html.BeginForm bir açma <form> etiketi oluşturur. Yardımcı, Html.BeginForm kullanıcı Filtre düğmesine tıklayarak formu gönderdiğinde formun kendisine göndermesine neden olur.
Uygulamayı çalıştırın ve film aramayı deneyin.
yönteminin SearchIndex aşırı yüklemesi yokturHttpPost. Yöntem uygulamanın durumunu değiştiremediğinden, yalnızca verileri filtrelediğinden buna ihtiyacınız yoktur.
Aşağıdaki HttpPost SearchIndex yöntemi ekleyebilirsiniz. Bu durumda, eylem çağırıcı yöntemiyle HttpPost SearchIndex eşleşecek ve HttpPost SearchIndex yöntem aşağıdaki görüntüde gösterildiği gibi çalışacaktır.
[HttpPost]
public string SearchIndex(FormCollection fc, string searchString)
{
return "<h3> From [HttpPost]SearchIndex: " + searchString + "</h3>";
}

Ancak, yöntemin SearchIndex bu HttpPost sürümünü ekleseniz bile, tüm bunların nasıl uygulandığında bir sınırlama vardır. Belirli bir aramaya yer işareti eklemek istediğinizi veya aynı filtrelenmiş film listesini görmek için tıklayabilecekleri arkadaşlarınıza bir bağlantı göndermek istediğinizi düşünün. HTTP POST isteğinin URL'sinin GET isteğinin URL'si (localhost:xxxxx/Movies/SearchIndex) ile aynı olduğuna dikkat edin; URL'nin kendisinde arama bilgisi yoktur. Şu anda, arama dizesi bilgileri sunucuya form alanı değeri olarak gönderilir. Başka bir deyişle, url'de arkadaşlarınıza yer işareti eklemek veya arkadaşlarınıza göndermek için bu arama bilgilerini yakalayamazsınız.
Çözüm, POST isteğinin arama bilgilerini URL'ye eklemesi gerektiğini ve yönteminin HttpGet sürümüne SearchIndex yönlendirilmesi gerektiğini belirten bir aşırı yükleme BeginForm kullanmaktır. Mevcut parametresiz BeginForm yöntemi aşağıdakilerle değiştirin:
@using (Html.BeginForm("SearchIndex","Movies",FormMethod.Get))

Artık bir arama gönderdiğinizde URL bir arama sorgusu dizesi içeriyor. Arama, bir HttpPost SearchIndex yönteminiz olsa bile eylem yöntemine HttpGet SearchIndex de gider.

Tarza Göre Arama Ekleme
Yönteminin HttpPost sürümünü SearchIndex eklediyseniz şimdi silin.
Ardından, kullanıcıların türe göre film aramasına izin vermek için bir özellik ekleyeceksiniz. SearchIndex yöntemini aşağıdaki kod ile değiştirin:
public ActionResult SearchIndex(string movieGenre, string searchString)
{
var GenreLst = new List<string>();
var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;
GenreLst.AddRange(GenreQry.Distinct());
ViewBag.movieGenre = new SelectList(GenreLst);
var movies = from m in db.Movies
select m;
if (!String.IsNullOrEmpty(searchString))
{
movies = movies.Where(s => s.Title.Contains(searchString));
}
if (string.IsNullOrEmpty(movieGenre))
return View(movies);
else
{
return View(movies.Where(x => x.Genre == movieGenre));
}
}
Yöntemin SearchIndex bu sürümü ek bir parametre alır, yani movieGenre. Kodun ilk birkaç satırı, veritabanından film türlerini tutmak için bir List nesne oluşturur.
Aşağıdaki kod, veritabanından tüm türleri alan bir LINQ sorgusudur.
var GenreQry = from d in db.Movies
orderby d.Genre
select d.Genre;
Kod, genel koleksiyonun List yöntemini kullanarak AddRange tüm benzersiz türleri listeye ekler. (Değiştirici olmadan Distinct yinelenen türler eklenir; örneğin, örneğimize iki kez komedi eklenir). Kod daha sonra nesnesinde ViewBag türlerin listesini depolar.
Aşağıdaki kod, parametresinin nasıl denetleneceklerini movieGenre gösterir. Boş değilse, kod seçilen filmleri belirtilen türle sınırlamak için film sorgusunu daha da kısıtlar.
if (string.IsNullOrEmpty(movieGenre))
return View(movies);
else
{
return View(movies.Where(x => x.Genre == movieGenre));
}
Türe Göre Aramayı Desteklemek için SearchIndex Görünümüne İşaretlemeyi Ekleme
Views\Movies\SearchIndex.cshtml dosyasına yardımcının TextBox hemen önüne bir Html.DropDownList yardımcı ekleyin. Tamamlanan işaretleme aşağıda gösterilmiştir:
<p>
@Html.ActionLink("Create New", "Create")
@using (Html.BeginForm("SearchIndex","Movies",FormMethod.Get)){
<p>Genre: @Html.DropDownList("movieGenre", "All")
Title: @Html.TextBox("SearchString")
<input type="submit" value="Filter" /></p>
}
</p>
Uygulamayı çalıştırın ve /Movies/SearchIndex konumuna gidin. Türe, film adına ve her iki ölçüte göre arama yapmayı deneyin.
Bu bölümde, çerçeve tarafından oluşturulan CRUD eylem yöntemlerini ve görünümlerini incelediniz. Kullanıcıların film başlığına ve tarza göre arama yapmasına olanak sağlayan bir arama eylemi yöntemi ve görünümü oluşturdunuz. Sonraki bölümde modele özellik Movie ekleme ve otomatik olarak test veritabanı oluşturacak başlatıcı ekleme adımlarını inceleyeceksiniz.