2009-07-03 17 views
5

Bu nedenle, bir veritabanı kaydı için bir eşzamanlama düğmesi oluşturabildiğim bir tablo düğmesi oluşturmak istedim (etkinleştir/devre dışı bırak). Bazı deneme yanılma sonra ASP.NET MVC'de bir AJAX geçiş resmi oluşturma

img http://i41.tinypic.com/os4vua.jpg

, almak o çalışma başarmış - ama daha zarif bir yolu olmalı gibi geliyor.

  • Görüntü etiketimi denetleyicimde tekrarlamaktan hoşlanmıyorum, açıkçası ... Bunu nasıl zarif bir şekilde önleyebilirim?
  • Yaptığım şeye yaklaşmanın genel bir yolu var mı? ...

    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"); 
        } 
    

    Ve manzarası: Burada

denetleyicisi benim kodudur

<% 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> 
... 
<% } %> 

hüner/bir görüntü kullanılarak Ajax.Actionlink ile kesmek here bulunmuştur .

+0

Yaptığın yolu gerçekten seviyorum. Daha basit hale getirmek için açık bir yol göremiyorum. İşaretlediğiniz gibi, görüntü mantığınız denetleyicide ve görünümde çoğaltılır, ancak sayfa yükü için mantıksal mantığa ihtiyacınız vardır ve Ajax çağrısı için denetleyicideki mantığa ihtiyacınız vardır. –

+0

Jilet Mvc 3'te bunu yeniden yazmaya çalışıyorum, "değiştir" ile bir hata alıyorum. System.Web.MVC.MVChtmlString bir eksiklik içermiyor diyor ... – Chaka

+0

Usturada yeniden yazmak için herhangi bir yardım? – Chaka

cevap

3

Modelin etkinleştirilip etkinleştirilmediğine bağlı olarak onay kutusu oluşturma hakkında.

jQuery'de, bu onay kutularını resimlerinizle değiştirebilirsiniz.

Kişisel document.ready kodu gibi bir şey onlara aklınıza herhangi fantezi stil vermek jquery-checkbox gibi eklentiyi kullanabilirsiniz, Alternatif gibi

$(document).ready(
function() 
{ 
    $('.enabledCheckbox').each(
     function() 
     { 
      var image = $(this).checked ? 'tick.png' ? 'tick_grey.png'; 
      $(this).parent.click(
       function() 
       { 
        if($(this).is('image')) 
         toggleEnabledStatus(); //write code in toggleEnabledStatus to toggle the state of the model on server side. 
       }  
       ); 
      $(this).parent.html('<img src=' + image + '/>'); 
     } 
    ); 
} 
); 

görünebilir.

+0

Bunu yapmanın en iyi yolu olduğunu söyleyebilirim - bu şekilde html sayfasını yalnızca html ile bırakırsınız ve tüm bu ekstra kodlarla karıştırmayın – sirrocco

0

Zarafet istediğiniz şey ise, bunun yerine temel ASPX sayfasına AJAX isteği yapmak için bir jQuery web hizmeti isteği kullanırdım. ASPX sayfanızda ihtiyacınız olan şey gerçek eylemi gerçekleştirmek için statik bir [WebMethod] ve jQuery'den bir $ .ajax() çağrısı olduğu için, oldukça şık.