2011-03-31 13 views
9

Bir varsayılan AjaxOptions nasıl oluştururum? Örneğin, bazı bağlantılara sahip bir menüm var, tüm web sitesini aynı loading element ve aynı error handling kullanıyor.Jilet Görünümleri için varsayılan AjaxOptions nasıl oluşturulur?

@Ajax.ActionLink("Home", "Index", "home", <AjaxOptions>) 

new AjaxOptions() 
{ 
    OnFailure = "handleError", 
    LoadingElementId = "loading" 
}); 

Ama sonra içeriğini güncellemek bazı bağlantılar var ve bu bağlantıların her biri için UpdateTargetId ayarlamak istiyorum. Tüm görünümler için varsayılan hata işleme ve yükleme öğesini nasıl saklayabilirim ve her bağlantı için yalnızca UpdateTargetId veya OnSuccess (veya başka bir özellik) düzenleyebilir miyim?

şey ben ajax istekleri varsayılan değerler ayarlayabilirsiniz ve ben bir ajax isteği yaptığınızda sadece ... Ben geçersiz kılmak istediğiniz parametreleri anlatmak jQuery.setup eşdeğer bir şey istiyorum

@Ajax.ActionLink("home", "Index", "home", ajaxOption.UpdateTargetId = "content") 
@Ajax.ActionLink("menu", "Foo", "home", ajaxOption.UpdateTargetId = "side-content") 

gibi

birden overl esnekliği yararlanma imzası isteğe bağlı parametreleri kullanıyorum

public static class AjaxExtensions 
{ 
    public static IHtmlString DefaultLink(this AjaxHelper helper, string text, 
     string action, string controller, string updateTargetId = "", 
     string onSuccess = "") 
    { 
     // Build your link here eventually using 
     // the arguments passed 
     var options = new AjaxOptions 
     { 
      OnSuccess = onSuccess, 
      UpdateTargetId = updateTargetId, 
      OnFailure = "handleError", 
      LoadingElementId = "loading" 
      // etc... 
     } 

     // return a normal ActionLink passing your options 
     return helper.ActionLink(text, action, controller, options); 
    } 
} 

Not:

+2

sadece bazı varsayılan parametreleri koyar Ajax ActionLink için bir uzantı yaparak düşündünüz mü? – Tejs

cevap

8

Sen gibi bir şey yapabileceğini Onları korumaktan rahatsızlık duymadan. Gerektiğinde Expand :) şöyle

Sonra sadece kullanmak:

@Ajax.DefaultLink("home", "Index", "home", updateTargetId: "content") 
7

Ben daha kolay AjaxOptions sınıf miras ve görünümde DefaultAjaxOptions örneğini gördük. Bu, ayrı bir uzantı yöntemi oluşturmadan bunlardan birine sahipseniz Ajax.ImageActionLink gibi şeyler için kullanabileceğiniz anlamına gelir. Aşağıdaki örneğe, değiştirmem gereken tek şey hedefti, bu yüzden kurucunun içine geçmesine izin verdim. görünümü kullanımda sonra

public class DefaultAjaxOptions : AjaxOptions 
{ 
    public DefaultAjaxOptions(string target) 
    { 
     InsertionMode = InsertionMode.Replace; 
     UpdateTargetId = target; 
     OnBegin = "BeginLoadingSection()"; 
     OnFailure = "FailureLoadingSection()"; 
     OnSuccess = "SuccessLoadingSection()"; 
    } 
} 

:

@{ var ajaxOptions = new DefaultAjaxOptions("name-of-content-div"); } 
+1

Güzel bir, aslında :) –

+0

Mükemmel Çözüm;) –

İlgili konular