Jadi saya ingin membuat tombol sakelar untuk tabel, tempat saya dapat melakukan panggilan async untuk memperbarui catatan database (aktifkan/nonaktifkan).
Setelah beberapa kali percobaan dan kesalahan, saya berhasil membuatnya berfungsi - tetapi rasanya harus ada cara yang lebih elegan.
- Saya tidak suka mengulangi tag gambar saya di pengontrol saya, tentu saja... Bagaimana saya bisa menghindarinya dengan cara yang elegan?
- Apakah ada cara yang lebih baik secara keseluruhan untuk melakukan pendekatan ini selain yang telah saya lakukan?
Ini kode saya di pengontrol:
public ActionResult ToggleEnabled(int id)
{
if (Request.IsAjaxRequest())
{
var p = this.PageRepository.GetPage(id);
p.Enabled = p.Enabled != true;
this.PageRepository.Edit(p);
return p.Enabled ? Content("<img src='/Content/icons/tick.png' border=0 />") : Content("<img src='/Content/icons/tick_grey.png' border=0 />");
}
return Content("Error");
}
Dan pemandangannya...:
<% var img = Model.Enabled ? "tick.png" : "tick_grey.png"; %>
<% foreach (var item in Model)
{ %>
...
<td align="center">
<%=Ajax.ActionLink("[replacethis]",
"ToggleEnabled",
new { id = Model.ID },
new AjaxOptions { UpdateTargetId = "toggleimage" + Model.ID }).Replace("[replacethis]",
string.Format("<div id='toggleimage{0}'><img src='/Content/icons/{1}' border='0' alt='toggle'/></div>",
Model.ID, Model.Enabled ? "tick.png" : "tick_grey.png"))%>
</td>
...
<% } %>
Trik/hack dengan Ajax.Actionlink menggunakan gambar ditemukan di sini.