[ppt]introduction to mvc 4 06. action methods, edit view, …sp.ntpcug.org/studygroupsig/shared...

23
Introduction to MVC 4 06. Action Methods, Edit View, and a Search Feature NTPCUG Dr. Tom Perkins

Upload: phammien

Post on 05-Apr-2018

218 views

Category:

Documents


5 download

TRANSCRIPT

Page 1: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

Introduction to MVC 406. Action Methods, Edit View, and a Search

Feature

NTPCUGDr. Tom Perkins

Page 2: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

The Edit Link

• Run the application• Append /Movies to the URL (browse to the

Movies controller)• Hover over the Edit link• Examine the generated URL

Page 3: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

The Edit link was generated by the Html.ActionLink method in the Views\Movies\Index.cshtml view:

@Html.ActionLink("Edit", "Edit", new { id=item.ID })

Hover

Page 4: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

The ActionLink HtmlHelper

• Generates a link to an action method on a controller

• Arguments:– 1) Text to render (Edit Me)– 2) Name of action method in controller (Edit)– 3) anonymous object route data (ID=4)

Page 5: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

Alternative: Pass Parameters Using Query String URL of: http://localhost:xxxxx/Movies/Edit?ID=4

Request sent to

Controller: MoviesAction Method: EditParameter ID: 4

Page 6: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

2 Edit Actions in the Movies Controller

//// 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);}

HttpPost Attribute

Invoked ONLY for POST requests

Default: Implied

[HttpGet] attribute

Invoked for GET requests

Page 7: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

The HTTPGet Edit Method1. movie ID paramter input (default = 0)2. Entity Framework Find used to look up the movie3. If movie cant be found, return HttpNotFound()4. The Model movie object is passed to the view

When the Edit View was created, the system scanned the model and generated the markup to edit the fields.

//// GET: /Movies/Edit/5

public ActionResult Edit(int id = 0){ Movie movie = db.Movies.Find(id); if (movie == null) { return HttpNotFound(); } return View(movie);}

Page 8: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

The Generated Edit View (Part 1)@model MvcMovie.Models.Movie

@{ ViewBag.Title = "Edit";}

<h2>Edit</h2>

The View expects that the Model it receives will be of type Movie

Page 9: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

The Generated Edit View (Part 2)@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>

…LabelFor displays the name of the fieldHtmlEditorFor renders an <input> statementValidationMessageFor displays validation messages associated with field

Page 10: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

Run the Application

• Navigate to /Movies URL• Click an Edit link• View the source for the page• Examine the HTML for the Form element• Note: Html <input> elements are in a <form>

element• Form action attribute is set to post• When Edit button is clicked, data will be posted to

the server

Page 11: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

Server actions when the Save button is clicked and the data is posted:

• The values from the Form are transformed into a Movie object by the ASP MVC model binder.

• The Movie object is passed to the Edit action in the Movies controller.

• The ModelState.IsValid method determines whether or not the data submitted in the form is OK, the data is saved in the db MovieDBContext instance.

• The movie data is saved to the database .• The user is redirected to the Index

action, which displays the data with changes.

• If form data is invalid, data is re-displayed with error messages created by Html.ValidationMessageFor helpers.

[HttpPost] public ActionResult Edit(Movie movie) { if (ModelState.IsValid) { db.Entry(movie).State = EntityState.Modified; db.SaveChanges(); return RedirectToAction("Index"); } return View(movie); }

Page 12: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

Posting Edited Form Data

Form Edited Data ModelState.IsValid method

Valid data

Data saved to database

Data sent to Index action, data (including changes) is

displayed

Invalid data sent back to form with error messages and form is redisplayed.

Page 13: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

Validation error messages

Page 14: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

Add a Search Method and View

• Objective: allow the user to search for movies by genre or name

• Add a SearchIndex action to the controllerSearchAction

method generates Html form for user to enter genre or name

Get Search Values

Search Database

Display Results

User submits search criteria

Page 15: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

Add a SearchIndex method to the MoviesController class

• s => s.Title is a Lambda expression

• Used in LINQ queries• LINQ queries not

executed when defined or modified (deferred)

• Executed when value is used or in ToList()

• Execution takes place in View

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); }

Page 16: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

Display the Search form for the User

• Create a SearchIndex View:• Right click inside the SearchIndex Method• In the AddView dialog box:– Pass a Movie object to the view– Choose List in the Scaffold Template– Click Add

Page 17: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method
Page 18: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

The Create View @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>

Page 19: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

Run the App

• Navigate using /Movies/SearchIndex?searchString=ghost

Page 20: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method
Page 21: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

Add a filter <form>@model IEnumerable<MvcMovie.Models.Movie> @{ ViewBag.Title = "SearchIndex"; } <h2>SearchIndex</h2> <p> @Html.ActionLink("Create New", "Create")

</p>

@using (Html.BeginForm()){ <p> Title: @Html.TextBox("SearchString") <br /> <input type="submit" value="Filter" /></p> }

Page 22: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method
Page 23: [PPT]Introduction to MVC 4 06. Action Methods, Edit View, …sp.ntpcug.org/STUDYGROUPSIG/Shared Documents/MVC 4... · Web viewThe Edit link was generated by the Html.ActionLink method

FINIS