使用者在當前頁面按下「新增」,透過 AJAX 送出資料,伺服器回應成功後,需在**不重整頁面**情況下,將新資料顯示於列表中。
document.getElementById('list').innerHTML = xhr.responseText;onsubmit 呼叫 ajaxPost(),成功回呼 document.getElementById('tb').innerHTML = data;。return PartialView("_ListPartial", model); 回傳 <tr>...</tr> 片段。<table id="tb"><tbody>...初始資料...</tbody></table>。fetch('/api/items', { method:'POST', body:JSON.stringify(formData) })
.then(r => r.json())
.then(item => {
const html = `${item.name} ${item.price} `;
document.querySelector('#tb tbody').insertAdjacentHTML('beforeend', html);
});
// Controller
[HttpPost]
public ActionResult Create(ItemForm form)
{
if (!ModelState.IsValid) return Json(new { success=false, errors=ModelState.Values.SelectMany(v=>v.Errors).Select(e=>e.ErrorMessage) });
var item = _service.Create(form);
var list = _service.GetAll(); // 重新查詢完整列表
return PartialView("_ListPartial", list); // 回傳完整 tbody HTML
}
@* _ListPartial.cshtml *@ @model IEnumerable- @foreach (var item in Model) {
} @item.Name @item.Price
// 前端 jQuery AJAX
$('#createForm').submit(function(e){
e.preventDefault();
$.post('@Url.Action("Create")', $(this).serialize(), function(html){
$('#tb tbody').html(html); // 直接替換 tbody 內容
$('#createForm')[0].reset();
});
});



| 專案類型 | 推薦策略 | 理由 |
|---|---|---|
| 傳統 ASP.NET MVC / WebForms | 策略一 (PartialView + innerHTML) | 零學習成本、複用既有 View、快速交付 |
| 新專案、SPA 傾向 | 策略二 (JSON + 前端模板) | 前後端分離、效能佳、易測試 |
| 複雜互動、長期維護 | 策略三 (MVVM 框架) | 狀態管理、元件化、生態系豐富 |
AJAX 更新列表無銀彈,依專案架構、團隊熟悉度、複雜度選擇最適策略。傳統 MVC 專案「PartialView + innerHTML」最務實;若朝前後端分離演進,建議逐步導入 JSON API + 前端渲染。