$("#Search").html(data);
That puts the results in an element with an id of Search, but there is no such element on your page. You need something on the page like
<div id="Search"></div>
Index.cshtml
@model SearchModel
<h1>Search</h1>
@using (Html.BeginForm())
{
<p>
Search: @Html.TextBoxFor(m => m.SearchText)<br/>
<input type="submit" value="Search" id="submit"/>
</p>
<div id="Search">
@Html.Partial("_SearchResults", Model)
</div>
}
<script type="text/javascript">
$(document).ready(function () {
$("#submit").click(function (e) {
e.preventDefault();
var url = '@Url.Action( "Search", "Home")';
$.get(url, {
searchText: $("#SearchText").val()
}, function (data) {
$("#Search").html(data);
});
});
});
</script>
_SearchResults.cshtml
@model TestMVC.Models.SearchModel
@if (Model.Results == null || Model.Results.Count == 0)
{
<p>No search results</p>
return;
}
<table>
@foreach(string result in Model.Results)
{
<tr>
<td>
@result
</td>
</tr>
}
</table>
SearchModel
public class SearchModel
{
public string SearchText { get; set; }
public List<string> Results { get; set; }
public void PopulateSearchResults()
{
this.Results = new List<string>();
this.Results.Add("Result 1 for " + this.SearchText);
this.Results.Add("Result 2 for " + this.SearchText);
this.Results.Add("Result 3 for " + this.SearchText);
}
}
Controller
[HttpGet]
public ActionResult Index()
{
SearchModel model = new SearchModel();
return View(model);
}
[HttpPost]
public ActionResult Index(SearchModel model)
{
model.PopulateSearchResults();
return View(model);
}
public ActionResult Search(string searchText)
{
SearchModel model = new SearchModel();
model.SearchText = searchText;
model.PopulateSearchResults();
return PartialView("_SearchResults", model);
}