source

Ajax.ActionLink가 작동하지 않습니다. 응답.IsAjaxRequest()는 항상 false입니다.

ittop 2023. 7. 26. 22:26
반응형

Ajax.ActionLink가 작동하지 않습니다. 응답.IsAjaxRequest()는 항상 false입니다.

저는 한동안 이 문제에 대해 구글을 검색해 왔고 많은 사람들이 이 문제를 공유하고 있는 것처럼 보이지만, 저는 제 문제에 대한 성공적인 해결책을 찾지 못했습니다.

MVC3 및 레이저를 사용합니다.

  1. 마스터 페이지 내용:

    <script src="@Url.Content("~/Scripts/jquery-1.5.min.js")" type="text/javascript"></script>

    <script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>

    <script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>

  2. AjaxTest.cshtml에는 다음이 포함됩니다.

    <div id="AjaxTestDiv">content</div>

    @Ajax.ActionLink("Update", "AjaxTester", new AjaxOptions { UpdateTargetId = "AjaxTestDiv" })

  3. AjaxTester 작업 방법:

    public string AjaxTester()
    {
        if (Request.IsAjaxRequest())
        {
            return DateTime.Now.ToString();
        }
        else
        {
            return "FAIL";
        }
    }
    

저는 항상 "실패"를 대상 div가 아닌 빈 페이지로 반환합니다.

편집: if (Request)를 제거한 경우에도 참고하시기 바랍니다.AjaxRequest()입니다. 아직 목표 div로 돌아오는 것이 없고, 대신 빈 페이지가 있습니다.

편집2: 생성된 HTML을 보면, 이것은 나의 링크입니다.

<a data-ajax="true" data-ajax-method="POST" data-ajax-mode="replace"
data-ajax-update="#AjaxTestDiv" href="/Area/AjaxTester">Update</a>

메서드를 GET으로 전환하려고 했지만 실패했습니다.

기본적으로 ASP.NET MVC 3은 모든 것과 함께 방해가 되지 않는 재쿼리를 사용합니다.Ajax.*조력자따라서 모든 Microsoft Ajax 스크립트(이 쓸모없는 c**p)를 제거하는 것으로 시작하고 대신 다음을 입력합니다.

<script src="@Url.Content("~/Scripts/jquery-1.5.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

그런 다음 web.config에서 방해가 되지 않는 AJAX를 활성화합니다(아직 활성화하지 않은 경우).

<appSettings>
    <add key="ClientValidationEnabled" value="true"/> 
    <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 
</appSettings>

이제 jquery는 HTML 5를 포함하는 모든 링크를 눈에 띄지 않게 AJAX화할 것입니다.data-*특성.

또는 더 나은 IMHO:

단순히 보기에 다음과 같습니다.

@Html.ActionLink("Update", "AjaxTester", new { id = "mylink" })

별도의 Javascript 파일에서 AJAXif 이 앵커:

$(function() {
    $('#mylink').click(function() {
        $('#AjaxTestDiv').load(this.href);
        return false;
    });
});

ActionLink가 제대로 작동하지 않을 수 있는 또 다른 IE 관련 문제인 ASP에 대해 설명합니다.NET MVC - Ajax에서 캐시를 방지합니다.작업 링크

기본적으로 IE는 때때로 Ajax GET 요청을 캐시하므로 Ajax 옵션의 HttpMethod를 POST로 설정하는 것이 ActionLink를 구성하는 덜 취약한 방법입니다.

@Ajax.ActionLink(
       item.Name + " (Ajax link test)",
         "MyActionName",
         routeValues: new { id = item.Id },
         ajaxOptions: new AjaxOptions()
         {
              UpdateTargetId = "divToUpdate",
              InsertionMode = InsertionMode.Replace,
              HttpMethod = "POST"
         })

여전히 이 문제에 직면하고 있는 사람들:

프로젝트 어딘가에 다음 파일이 있어야 합니다.

enter image description here

그렇지 않은 경우 아래의 너겟 패키지는 비주얼 스튜디오 프로젝트의 너겟 관리자 또는 패키지 관리자 콘솔에서 다운로드하십시오. https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Validation/3.2.11/

각 보기 또는 레이아웃 파일에서 jquery.min.js 최신 버전 뒤에 위에 추가된 파일을 참조하십시오.

enter image description here

프로젝트에 jquery.unbusive-ajax.js 패키지를 추가하면 예상한 방식으로 작동합니다.

현재 스크립트 형식 CDN 포함: https://www.cdnpkg.com/jquery-ajax-unobtrusive

<script src="@Url.Content("https://cdnjs.cloudflare.com/ajax/libs/jquery-ajax-unobtrusive/3.2.6/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>

또는 NuGet: https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Ajax/3.2.6 패키지를 설치하고 설치된 번들을 적용합니다.

jquery.unbusive-ajax.jsjquery.validate.unbusive.js는 동일하지 않습니다.

제 경우에는 이 패키지가 설치되지 않았고 agax.action 링크가 html.actionLink처럼 작동하여 대상 div에 부분 뷰를 삽입하는 대신 전체 뷰를 렌더링했습니다.

언급URL : https://stackoverflow.com/questions/4973605/ajax-actionlink-not-working-response-isajaxrequest-is-always-false

반응형