Introduction to mvc 4 06 action methods edit view and a search feature
This presentation is the property of its rightful owner.
Sponsored Links
1 / 23

Introduction to MVC 4 06. Action Methods, Edit View, and a Search Feature PowerPoint PPT Presentation


  • 97 Views
  • Uploaded on
  • Presentation posted in: General

Introduction to MVC 4 06. Action Methods, Edit View, and a Search Feature. NTPCUG Dr. Tom Perkins. 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. Hover.

Download Presentation

Introduction to MVC 4 06. Action Methods, Edit View, and a Search Feature

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Introduction to mvc 4 06 action methods edit view and a search feature

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

NTPCUG

Dr. Tom Perkins


The edit link

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


Introduction to mvc 4 06 action methods edit view and a search feature

Hover

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


The actionlink htmlhelper

The ActionLinkHtmlHelper

  • 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)


Alternative pass parameters using query string

Alternative: Pass Parameters Using Query String

URL of: http://localhost:xxxxx/Movies/Edit?ID=4

Request sent to

Controller: Movies

Action Method: Edit

Parameter ID: 4


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

}

Default: Implied [HttpGet] attribute

2 Edit Actions in the Movies Controller

Invoked for GET requests

HttpPost Attribute

Invoked ONLY for POST requests


The httpget edit method

The HTTPGet Edit Method

  • //

  • // GET: /Movies/Edit/5

  • public ActionResult Edit(int id = 0)

  • {

  • Movie movie = db.Movies.Find(id);

  • if (movie == null)

  • {

  • return HttpNotFound();

  • }

  • return View(movie);

  • }

  • movie ID paramter input (default = 0)

  • Entity Framework Find used to look up the movie

  • If movie cant be found, return HttpNotFound()

  • 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.


The generated edit view part 1

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


The generated edit view part 2

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 field

HtmlEditorFor renders an <input> statement

ValidationMessageFor displays validation messages associated with field


Run the application

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


Server actions when the save button is clicked and the data is posted

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

}


Posting edited form data

Posting Edited Form Data

ModelState.IsValid method

Edited Data

Form

Valid data

Data saved to database

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

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


Validation error messages

Validation error messages


Add a search method and view

Add a Search Method and View

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

  • Add a SearchIndex action to the controller

SearchAction method

Html form for user to enter genre or name

generates

Get Search Values

User submits search criteria

Search Database

Display Results


Add a searchindex method to the moviescontroller class

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 ActionResultSearchIndex(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);

}


Display the search form for the user

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


The create view

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>


Run the app

Run the App

  • Navigate using /Movies/SearchIndex?searchString=ghost


Add a filter form

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>

}


Introduction to mvc 4 06 action methods edit view and a search feature

FINIS


  • Login