私はasp.netmvcで開発していますが、今日、ajaxヘルパーの使用に奇妙なことが見られました。
Ajax.BeginForm(...)またはAjax.ActionLink(...)を使用する場合、これらはアクションを非同期的に呼び出し(投稿)せず、通常の形式または通常のリンクとして機能しますが、[リクエスト]をオンにすると.IsAjaxRequest()が動作している場合、trueを返します。
ajaxフォームの場合、私は
$('#createqfrm').submit(function () {...}
正常に動作し、フォームを非同期で送信します。
注:jqueryの新しいバージョン以降、jquery.unobtrusive-ajax.minで.live()を.on()に変更する必要があることはわかっています。
また、ここに私の参照されたJavaライブラリがあります:
<script src="@Url.Content("~/Scripts/jquery-1.9.0.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
編集済み:
Request.IsAjaxRequest()を確認し、falseが返されることを確認しました。
追加されたアクションコード:
public ActionResult GetStriing()
{
if (Request.IsAjaxRequest())
{
return Json("ajax called",JsonRequestBehavior.AllowGet);
}
else
{
return Json("ajax not called", JsonRequestBehavior.AllowGet);
}
}
フォームのhtmlコードの一部:
<form action="/admin/xxxx/create" data-ajax="true" data-ajax-success="handeCreateQuestionnareSuccess" id="form0" method="post"> <div class="editor-label">
<label for="Title">title</label>
</div>
<div class="editor-field">
<input class="text-box single-line" data-val="true" data-val-required="*" id="Title" name="Title" type="text" value="" />
<span class="field-validation-valid" data-valmsg-for="Title" data-valmsg-replace="true"></span>
</div>
<div class="editor-label">
<label for="Status">Status</label>
</div>
....
<script type="text/javascript">
function handeCreateQuestionnareSuccess(context) {
debugger;
if (context) {
$("#CreateQuestionnarieform").empty().html(context[1]);
$("#CreateQuestionnarieform").append('<input type=hidden name=questionnarieid value=' + context[2] + '/>');
} else {
$("#CreateQuestionnarieform").empty().html(context[1]);
$("form").removeData("validator");
$("form").removeData("unobtrusiveValidation");
$.validator.unobtrusive.parse("form");
}
}
</script>
ajax呼び出しでフォームを送信するコード:
$('#createqfrm').submit(function () {
if ($(this).valid()) {
$.ajax({
url: this.action,
type: this.method,
data: $(this).serialize(),
success: function (context) {
}
});
}
return false;
});
解決策ではありませんが、他のユーザーに通知できます。
問題は、jquery 1.9.0と、nugetから取得したjquery.validate.min.jsおよびjquery.validate.unobtrusive.min.jsの更新にあります。1.8.3に戻したところ、正常に動作します。