2011-03-31 4 views
9

AjaxOptions을 어떻게 만듭니 까? 예를 들어 링크가있는 메뉴가 있는데 전체 웹 사이트에 loading element과 같은 error handling을 사용하고 싶습니다.면도기 뷰용 기본 AjaxOptions을 만드는 방법은 무엇입니까?

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

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

는 그러나 나는 내용을 업데이트 몇 가지 링크를 가지고 있고 그 링크의 각 UpdateTargetId을 설정합니다. 모든 뷰에서 기본 오류 처리 및로드 요소를 유지하고 각 링크에 대해 UpdateTargetId 또는 OnSuccess (또는 다른 속성) 만 편집 할 수 있습니까?

뭔가 내가 아약스 요청에 기본 값을 설정할 수 있습니다 나는 아약스 요청을 할 때 난 단지 ... 내가 무시하려는 매개 변수를 말할 jQuery.setup에 해당 무언가를 원하는

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

같은

나는 여러 overl의 유연성의 혜택을 서명에 선택적 매개 변수를 사용하고

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

참고 :

+2

당신은 그냥 기본 매개 변수에두고 아약스 - ActionLink에 대한 확장을 간주 적이 있습니까? – Tejs

답변

8

에게 당신이 뭔가를 할 수 그들을 유지하는 성가신 일이 없습니다. 필요에 따라 확장 : 다음과 같이

그럼 그냥 사용

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

내가 쉽게 AjaxOptions 클래스를 상속하고 나의보기에 DefaultAjaxOptions의 인스턴스를 발견했다. 이것은 Ajax.ImageActionLink와 같은 것들을 위해 별도의 확장 메소드를 만들지 않고 사용할 수 있다는 것을 의미합니다. 아래 예제를 참조하십시오. 변경해야하는 유일한 것은 대상이므로이를 생성자에 전달할 수있었습니다. 뷰 사용 후

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

좋은 하나, 실제로 :) –

+0

우수 솔루션;) –

관련 문제