MVC 3 , ajax, c#
My partial view is rendering as a new page instead of replacing the search results table.
Controller:
public class SearchController : Controller { // // GET: /Search/ private myEntities db = new myEntities(); private Repository repo = new Repository(); [HttpGet] public ActionResult Index() { var model = new List<PersonViewModel>(); model = repo.GetPeople(); return View(model); } public PartialViewResult _SearchResult(string fname, string lname) { var personResult = repo.GetSearchResult(fname, lname); return PartialView("_SearchResult", personResult); } }
The view:
<div class="page"><div class="middle-col-comment-mod"><h2>Search Existing Trespassers</h2><div id="search"> @using (Ajax.BeginForm("_SearchResult", "Search", null, new AjaxOptions { HttpMethod = "Get", InsertionMode = System.Web.Mvc.Ajax.InsertionMode.Replace, UpdateTargetId = "indexSearchResults" })) {<div class="editor-field"> <label>First Name:</label> @Html.TextBox("FirstName")<label style = "margin-left: 15px;">Last Name:</label> @Html.TextBox("LastName", "", new { style = "margin-right: 15px;" })<input type="submit" name="submit" class="skbutton" value="Search" /></div> }</div><div id="indexSearchResults" ><table class="data-table"><tr><th> First Name</th><th> Last Name</th><th> Gender</th><th> City</th><th> Date of Birth</th><th> Is a Student?</th><th> Actions</th></tr> @if (Model.Count() == 0) { <tr><td colspan=7> There are currently no trespassers in the trespass database.</td></tr> } else { foreach (var item in Model) {<tr><td> @Html.DisplayFor(modelItem => item.FirstName)</td><td> @Html.DisplayFor(modelItem => item.LastName)</td><td> @Html.DisplayFor(modelItem => item.Gender)</td><td> @Html.DisplayFor(modelItem => item.DOB)</td><td> @Html.DisplayFor(modelItem => item.School)</td><td> @Html.DisplayFor(modelItem => item.IsStudent)</td><td> @Html.ActionLink("Edit", "Edit", new { id = item.PersonId }) | @Html.ActionLink("Details", "Details", new { id = item.PersonId }) | @Html.ActionLink("Delete", "Delete", new { id = item.PersonId })</td></tr> } }</table></div></div></div>
And the partial view:
@model IEnumerable<TrespassTracker.Models.PersonViewModel><table><tr><th> First Name</th><th> Last Name</th><th> Gender</th><th> Date of Birth</th><th> Is a Student?</th><th> Actions</th></tr> @if (Model.Count() == 0) { <tr><td colspan=7> There are currently no trespassers in the trespass database - this is a partial view.</td></tr> } else { foreach (var item in Model) {<tr><td> @Html.DisplayFor(modelItem => item.FirstName)</td><td> @Html.DisplayFor(modelItem => item.LastName)</td><td> @Html.DisplayFor(modelItem => item.Gender)</td><td> @Html.DisplayFor(modelItem => item.DOB)</td><td> @Html.DisplayFor(modelItem => item.IsStudent)</td><td> @Html.ActionLink("Edit", "Edit", new { /* id=item.PrimaryKey */ }) | @Html.ActionLink("Details", "Details", new { /* id=item.PrimaryKey */ }) | @Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })</td></tr> } }</table><script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
From my research I found the usual suspect to be the missing link to the jquery script in the partial, but I had that. I checked the network tab on my wed dev tools and found it is being called. What else could the problem be?