jquery.unobtrusive-ajax.js(依賴 jQuery),啟用非侵入式 AJAX。UnobtrusiveJavaScriptEnabled=true(默認開啟)。| HTML 輔助 | AJAX 輔助 | 關鍵差異 |
|---|---|---|
@Html.ActionLink | @Ajax.ActionLink | 多 AjaxOptions 參數控制異步行為 |
@Html.BeginForm | @Ajax.BeginForm | 表單提交異步化,支援載入中、成功/失敗回調 |
<div id="dailydeal">
@Ajax.ActionLink("點擊獲取每日優惠", "DailyDeal", new AjaxOptions
{
UpdateTargetId = "dailydeal",
InsertionMode = InsertionMode.Replace,
HttpMethod = "Get"
})
</div>
public ActionResult DailyDeal()
{
var album = storeDB.Albums.OrderBy(a => a.Price).First();
return PartialView("_DailyDeal", album);
}
@model MvcMusicStore.Models.Album
<div>
<h3>@Model.Title</h3>
<p>價格: @Model.Price</p>
<img src="@Model.AlbumArtUrl" alt="@Model.Title" />
</div>
生成的 HTML:
<a data-ajax="true"
data-ajax-method="Get"
data-ajax-mode="replace"
data-ajax-update="#dailydeal"
href="/Home/DailyDeal">點擊獲取每日優惠</a>
jquery.unobtrusive-ajax.js 掃描 [data-ajax=true] 元素,綁定 click/submit 事件,發送 AJAX 請求,根據 data-ajax-update 目標替換內容。@using (Ajax.BeginForm("ArtistSearch", "Home", new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
HttpMethod = "GET",
OnFailure = "searchFailed",
LoadingElementId = "ajax-loader",
UpdateTargetId = "searchresults"
}))
{
<input type="text" name="q" placeholder="輸入藝術家名稱" />
<input type="submit" value="搜索" />
<img id="ajax-loader" src="@Url.Content("~/Content/Images/ajax-loader.gif")" style="display:none" />
}
<div id="searchresults"></div>
<script>
function searchFailed() {
$("#searchresults").html("對不起,查詢出錯,請重試。");
}
</script>
public ActionResult ArtistSearch(string q)
{
var artists = storeDB.Artists.Where(a => a.Name.Contains(q)).ToList();
return PartialView(artists);
}
@model IEnumerable<MvcMusicStore.Models.Artist>
<ul>
@foreach (var item in Model) {
<li>@item.Name</li>
}
</ul>
| 屬性 | 說明 | 典型值 |
|---|---|---|
| UpdateTargetId | 接收回應內容的容器 ID | "searchresults" |
| InsertionMode | 插入方式 | Replace / InsertBefore / InsertAfter |
| HttpMethod | 請求方法 | GET / POST |
| LoadingElementId | 載入中顯示的元素 ID | "ajax-loader" |
| OnBegin/OnComplete/OnSuccess/OnFailure | 客戶端回調函數名 | "searchFailed" |
| Confirm | 執行前確認對話框文本 | "確定刪除?" |
<appSettings>
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
單視圖覆蓋:@{ Html.EnableUnobtrusiveJavaScript(false); }
現代 ASP.NET Core / MVC 6+ 推薦使用 <form data-ajax="true"> 原生屬性或 fetch/axios 手寫 AJAX,配合 TagHelper 封裝,減少對 Microsoft.jQuery.Unobtrusive.Ajax 套件的依賴,提升前端靈活性與類型安全。