2012-02-22 4 views
4

파일 목록을 표시하고 사용자가 목록에서 삭제할 수 있도록합니다. 삭제 단추는 '삭제'작업을 실행하기 위해 컨트롤러에 대한 아약스 호출을 수행합니다. 그러나 삭제 액션은 호출되지 않습니다. AjaxOptions에 정의 된 확인 경고가 나타납니다. 가치가있는 부분에 대해 WebForms 엔진을 사용하여 작업하고 Razor로 옮겼습니다. 또한, 제가 Area를 처음 사용했습니다. 삭제 작업을 직접 호출하면 작동합니다. 라우팅 문제입니까? 여기 Ajax.ActionLink가 컨트롤러 액션을 호출하지 않습니다.

다음은 지역 등록에서

 routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute("SubscriberAll","subscriber/{id}",new { controller = "Subscriber", action = "ShowAll" },new { id = @"\d+" }); 
     routes.MapRoute("Default", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }); 

경로를 여기

@Ajax.ActionLink("test", "Delete", new { fileName = item.FileName }, new AjaxOptions 
                       { 
Confirm = "Are you sure you want to delete " + item.FileName + "?", 
OnComplete = "function(){deleteComplete('" + item.jsReferenceableFileName + "')}", 
HttpMethod = "DELETE", 
OnFailure = "function(){alert('Could not delete file');}" 
       }, new { @class = "DeleteButton" } 
                      ) 

까지 표시가되어있어 내 RegisterRoutes

public EmptyResult Delete(string fileName) 
    { 
     if (fileName.IsNullOrEmpty()) return null; 
     var model = new Models.BenefitBookletModel(); 
     model.DeleteBooklet(fileName); 
     return null; 
    } 

뒤에 코드의

context.MapRoute("Marketing_default","Marketing/{controller}/{action}/{id}",new { action = "Index", id = UrlParameter.Optional } 

다음은 DELETE로 동작 링크의 HttpMethod를 정의하지만 GET 받아에만 아마 방법

<a href="/Marketing/BenefitBooklet/Delete?fileName=MyFileName.pdf" data-ajax-method="GET" data-ajax-failure="function(){alert('Could not delete file');}" data-ajax-confirm="Are you sure you want to delete MyFileName.pdf?" data-ajax-complete="function(){deleteComplete('MyFileName.pdf')}" data-ajax="true" class="DeleteButton"> </a> 
+0

은 Global.asax에에서 정보를 추가하십시오. – Kath

+0

Delete 메서드는 뷰를 렌더링 한 컨트롤러와 같은 컨트롤러에 있습니까? 그렇지 않으면 ActionLink (AjaxHelper, String, String, String, Object, AjaxOptions) 오버로드를 사용하여 컨트롤러를 정의해야합니다. –

+0

예, 둘 다 동일한 컨트롤러에 있습니다. –

답변

4

해당 AjaxOptions 등록 정보의 값으로 함수 이름을 지정해야합니다. 'AjaxOptions'에 OnFailureOnComplete을보기에

<script type="text/javascript"> 
    function OnFailure(request, error) { 
     alert('Could not delete file'); 
    } 
    function OnComplete(request, error) { 
     alert('Delete complete'); 
    } 
</script> 

변경 : script 섹션을 추가 경로를 등록 할 경우

OnFailure = "OnFailure" 
OnComplete= "OnComplete" 
+0

그것이 문제였습니다. 함수()가 문제를 일으켰습니다. 감사! –

1

생성 된 마크 업입니다. Delete 액션 동사로 꾸며보십시오.

[HttpDelete] 
public EmptyResult Delete(string fileName) 
+0

시도한 HttpDelete 및 [AcceptVerbs (HttpVerbs.Delete)]. 컨트롤러 액션은 Ajax에서 호출되지 않습니다 .ActionLink –

+0

HTTP 삭제를 수행 할 액션에 대한 링크를 만들 수 없기 때문에 작동하지 않습니다. 예상했던 '가짜 삭제'요청 일 것입니다. 404 링크를 클릭하십시오. – WarHog

+0

페이지에 JS 오류가 있습니까? 당신은 모든 js 파일을 가지고 있습니까? jquery.unobtrusive-ajax.min.js를 포함합니다. 당신은 그것을'[HttpPost]'와'HttpMethod = "POST"'로 변경할 수 있습니다. –