Если нет особых причин для отправки с использованием jquery, я бы использовал встроенный помощник Ajax.BeginForm.
Сначала измените объявление формы на использование ajax (обратите внимание на изменение с Html.BeginForm на Ajax.BeginForm ...):
@using (Ajax.BeginForm("List", "Home",
new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST",
UpdateTargetId = "search-results"
}))
{
@Html.EditorFor(model => model.Id, new { htmlAttributes = new { @class = "form-control", @id = "Id", @type = "text" } })
@Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control", @id = "Name", @type = "text" } })
<input type="submit" value="Search" />
}
Итак, что здесь происходит, это использует ajax для отправки формы, затем, когда возвращается результат, мы говорим ему обновить div с id «search-results», заменив этот div результатами. В этом случае результаты будут вашим частичным представлением. Также обратите внимание, что мы указываем контроллер и действие в параметрах формы.
Затем измените div для результатов поиска. Здесь нет необходимости в вызове рендеринга, потому что он не нужен до окончания поиска:
<div class="row">
<div id="search-results"></div>
</div>
Обратите внимание, что идентификатор div совпадает с параметрами ajax UpdateTargetId.
Тогда в методе постконтроллера, только изменение, я бы сделал это, чтобы указать частичное имя представления в возвращении. Не уверен, что это необходимо на 100%, но я много раз сталкивался с проблемами, если не знаю:
[HttpPost]
public ActionResult List(Student model)
{
// Do stuff
return PartialView("_myPartial", model);
}
Последнее, что нужно сделать, - убедиться, что у вас установлен пакет nuget Microsoft.jQuery.Unobtrusive.Ajax и скрипт включен в комплект. Это необходимо, чтобы сделать его ajaxy, иначе частичное представление будет возвращено как полная страница.
UPDATE:
Как добавить скрипт в комплект. Просто добавьте его в пакет jquery. Откройте файл BundleConfig.cs в папке App_Start. Найдите пакет jQuery, который обычно является первым:
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js"));
И добавьте новую строку, чтобы включить ненавязчивый AJAX, поэтому должен выглядеть так:
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js",
"~/Scripts/jquery.unobtrusive-ajax.min.js"));