저는 Ajax 도우미를 사용하여 내 웹 사이트에서 아래와 같은 여러 가지 양식을 만들었지 만, 어떤 이유로이 단일 양식은 제출 될 때 두 번 게시됩니다. dev 도구에서 즉시 폼이 제출되는 것을 볼 수 있습니다. 둘 사이의 유일한 차이점은 첫 번째 헤더에 추가 헤더 (X-Requested-With : XMLHttpRequest)가 있다는 것입니다.Ajax.BeginForm 컨트롤러에 두 번 게시 (ASP.NET MVC5)
나는 Stackoverflow에 대한 답변을 통해 jquery.unobtrusive 파일에 대해 중복 요청을했을 수도 있지만 소스와 개발자 도구를 확인하고 단 하나의 인스턴스 만 찾을 수 있다고 대답했습니다. 또한 양식을 제출할 수있는 다른 코드를 찾을 수 없습니다.
jquery.unobtrusive 라이브러리를 제거하면 양식은 AJAX 요청이 아닌 한 번만 전송되므로 문제는이 라이브러리의 어딘가에 있으며 양식을 어떻게 설정했는지를 나타냅니다.
내보기는 다음과 같습니다
@using (Ajax.BeginForm("_Action", "Controller", null, new AjaxOptions
{
HttpMethod = "POST",
OnBegin = "beginFunc",
OnComplete = "completeFunc",
OnSuccess = "successFunc",
OnFailure = "failureFunc"
},
new { id = "form-id", @class = "loading-container" }))
{
@Html.AntiForgeryToken()
<div class="form-input">
@Html.EditorFor(m => m.PropertyName)
@Html.ValidationMessageFor(m => m.PropertyName)
</div>
<button type="submit" class="right-arrow">Submit</button>
}
내 작업은 다음과 같습니다 이
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery.validate.unobtrusive*", "~/Scripts/jquery.unobtrusive*"));
이
는 사람이 하나를 제공 할 수 나는
다음 한 내 BundleConfig.cs에서[HttpPost]
[ValidateAntiForgeryToken]
public JsonResult _Action(ViewModel vm)
{
// Method code goes here
}
디버깅 방법이나 내가 확인할 수있는 것들에 대한 다른 제안?
'OnBegin' 등의 기능은 무엇입니까? –
@AlanBuchanan이 부분보기입니까? 문제는 jquery.validate.unobtrusive를 여러 번 참조하는 것일 수 있습니다. – Sherlock
@StephenMuecke OnBegin 등의 함수는 로더 추가와 같은 시각적 인 작업을 수행하고 있습니다. –