Ajax.ActionLink가 작동하지 않습니다. 응답.IsAjaxRequest()는 항상 false입니다.
저는 한동안 이 문제에 대해 구글을 검색해 왔고 많은 사람들이 이 문제를 공유하고 있는 것처럼 보이지만, 저는 제 문제에 대한 성공적인 해결책을 찾지 못했습니다.
MVC3 및 레이저를 사용합니다.
마스터 페이지 내용:
<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>
AjaxTest.cshtml에는 다음이 포함됩니다.
<div id="AjaxTestDiv">content</div>
@Ajax.ActionLink("Update", "AjaxTester", new AjaxOptions { UpdateTargetId = "AjaxTestDiv" })
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"
})
여전히 이 문제에 직면하고 있는 사람들:
프로젝트 어딘가에 다음 파일이 있어야 합니다.
그렇지 않은 경우 아래의 너겟 패키지는 비주얼 스튜디오 프로젝트의 너겟 관리자 또는 패키지 관리자 콘솔에서 다운로드하십시오. https://www.nuget.org/packages/Microsoft.jQuery.Unobtrusive.Validation/3.2.11/
각 보기 또는 레이아웃 파일에서 jquery.min.js 최신 버전 뒤에 위에 추가된 파일을 참조하십시오.
프로젝트에 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.js와 jquery.validate.unbusive.js는 동일하지 않습니다.
제 경우에는 이 패키지가 설치되지 않았고 agax.action 링크가 html.actionLink처럼 작동하여 대상 div에 부분 뷰를 삽입하는 대신 전체 뷰를 렌더링했습니다.
언급URL : https://stackoverflow.com/questions/4973605/ajax-actionlink-not-working-response-isajaxrequest-is-always-false
'source' 카테고리의 다른 글
Mysql: 두 날짜 사이의 모든 데이터 선택 (0) | 2023.07.26 |
---|---|
Windows에서 GTK+ 3.0을 어떻게 설치합니까? (0) | 2023.07.26 |
Spring WebFlux WebClient를 조롱하는 방법은 무엇입니까? (0) | 2023.07.26 |
PL/SQL 대량 수집을 스파스 키를 사용하여 연관 배열로 수집 (0) | 2023.07.26 |
jQuery AJAX vs.업데이트 패널 (0) | 2023.07.26 |