Данное руководство устарело. Актуальное руководство: Руководство по ASP.NET Core
Другим часто используемым AJAX-хелпером является Ajax.ActionLink. Он во многом похож на хелпер Ajax.BeginForm за тем исключением, что генерирует специальные ajax-ссылки. Посмотрим на примере. Добавим в представление следующую разметку:
<div id="bestbook"> @Ajax.ActionLink("Лучшая книга", "BestBook", new AjaxOptions{ UpdateTargetId="bestbook"}) </div>
В данном случае мы также используем объект AjaxOptions для установки параметров асинхронной ссылки, который принимает все те же параметры, что и в случае с ajax-формой.
Мы помещаем ссылку в элемент с id, который указывается в параметре UpdateTargetId
. Таким образом, результат запроса будет замещать ссылку.
Но для работы нам также необходимо, как и в случае с ajax-формой, действие контроллера и вызываемое им частичное представление.
Метод контроллера, в данном случае BestBook
, будет просто возвращать первую книгу:
public ActionResult BestBook() { Book book = db.Books.First(); return PartialView(book); }
А вызываемое им частичное представление BestBook.cshtml будет выводить информацию об этой книге:
@model AjaxMvcApplication.Models.Book <h3>Лучшая книга</h3> @Html.DisplayForModel()
AJAX-ссылка будет отображена при запуске как обычная ссылка:
А после нажатия она будет заменена полученным от сервера контентом:
В качестве примера можно также изменить код представления из предыдущего раздела про ajax-формы, применив ajax-ссылки:
@using (Ajax.BeginForm("BookSearch", new AjaxOptions { UpdateTargetId = "results"})) { <input type="text" name="name" /> <input type="submit" value="Поиск" /> } <div id="results"></div> <br /> @foreach(string s in ViewBag.Authors) { <div style="margin-right:8px;float:left;"> @Ajax.ActionLink(s, "BookSearch", new {name=s},new AjaxOptions{ UpdateTargetId="results"}) </div> } @Scripts.Render("~/scripts/jquery-1.10.2.min.js") @Scripts.Render("~/scripts/jquery.unobtrusive-ajax.min.js")
В итоге все авторы, передаваемые в представление через ViewBag (например, так:
ViewBag.Authors = db.Books.Select(s => s.Author).Distinct();
), выводятся в виде ссылок внизу страницы.
А нажатие на одну из этих ссылок будет иметь то же действие, что и поиск по кнопке: