テーブルのトグルボタンを作成して、データベースレコードを更新するための非同期呼び出し(有効/無効)を作成したかったのです。いくつかの試行錯誤の後ASP.NET MVCでAJAXトグルイメージを作成する
img http://i41.tinypic.com/os4vua.jpg
、私はそれが働いて得るために管理している - しかし、よりエレガントな方法がなければならないようにそれは感じています。
- 私のコントローラーでイメージタグを繰り返しているのは好きではありません...どうすればわかりやすくそれを避けることができますか?
- 私がやったことに、これに全体的にアプローチする方法がありますか?ここで
コントローラでの私のコードです:
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");
}
とビュー...:
<% 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>
...
<% } %>
トリックは/発見された画像を使用してAjax.Actionlinkとハックhere 。
私は実際にあなたがそれをやったのが好きです。私はそれをより簡単にするための明白な方法は見当たりません。あなたが指摘したように、イメージ・ロジックはコントローラとビューに複製されていますが、ページ・ロードのためにビューにロジックが必要です。コントローラのロジックがAjaxコールに必要です。 –
これをかみそりMvc 3で書き直そうとすると、「置き換え」にエラーが発生します。それはSystem.Web.MVC.MVChtmlStringに定義が含まれていないと言います... – Chaka
かみそりで書き直す方法についてのヘルプ? – Chaka