私の Web サイトには 2 つの同一の AJAX フォームがあります (唯一の違いは、それらが含まれている方法です)。目立たない AJAX をテンプレートに含めた場合にのみ機能するフォームが 1 つあります。他の形式は、目立たない AJAX を含めない場合にのみ機能します。機能しないフォームは次のとおりです。
@model ViewModels.Book.FindNewBookViewModel
@{
AjaxOptions options = new AjaxOptions
{
HttpMethod = "Get",
UpdateTargetId = "book-overview",
Url = Url.Action("BooksData", "Book"),
LoadingElementId = "loading",
LoadingElementDuration = 2000,
};
}
@using (Ajax.BeginForm("BooksData", "Book", options, new { @class = "form-search" }))
{
@Html.AntiForgeryToken()
<div class="row-fluid">
@Html.TextBoxFor(x => x.Search, new { autofocus = "autofocus" })
<input type="submit" value="Search" class="btn btn-primary btn-small"/>
</div>
<div id="loading" class="loading">
<p>Searching...</p>
</div>
<div id="book-overview" class="row-fluid">
@Html.Action("BooksData", "Book", new { search = Model })
</div>
}
そして、このフォームからの呼び出しを処理するコントローラー メソッド:
[Authorize]
public ActionResult BooksData(FindNewBookViewModel viewModel)
{
if (viewModel.Search == null)
{
return PartialView();
}
var data = _bookService.FetchBooks(viewModel.Search);
return data != null ? PartialView(data) : PartialView();
}
フォームをロードすると、アクション メソッドに対して空のリクエストが実行されます。しかし、何かを入力して送信ボタンをクリックしても、リクエストは実行されません。
作業フォームと非作業フォームの唯一の違いは、作業フォームが Html.Action() によって別のページに含まれており、非作業フォームには直接移動できる独自のページがあることです。
これらは、_layout にロードした私の JS ライブラリです。
jquery-2.0.0.min.js
jquery.unobtrusive-ajax.min.js
jquery.validate.min.js
jquery.validate.unobtrusive.min.js
これを修正する方法を知っている人はいますか?