私はこのすべてにかなり新しいです。 ASP.NET MVC C# LINQ to SQL を使用しています。
著者とそのすべての書籍をロードする編集ページがあります。ブックは Ajax 呼び出しを介してロードされます。
<script type="text/javascript">
$(document).ready(function() {
LoadBooks();
});
function LoadBooks() {
$(".Books").hide();
$(".Books").load("/Books/Edit/<%= Model.AuthorID %>");
$(".Books").show('slow');
}
</script>
この部分は正常に機能しています。ページに著者情報が読み込まれ、次に書籍が読み込まれます(DIV id = "Books"の部分ビュー、書籍カテゴリと書籍タイトルのみ):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<Solution.Controllers.BooksController+BooksViewModel>" %>
<% using (Html.BeginForm(null,null, FormMethod.Post,new { id = "bookform" }))
{%>
<fieldset>
<legend>Books</legend>
<%int i = 0;
foreach (var book in Model.Books)
{%>
<%= book.BookID%>
<%= Html.Hidden("book[" + i + "].BookID", book.BookID) %>
<%= Html.DropDownList("book[" + i + "].CatID", new SelectList(Model.Categories, "CatID", "CatTitle", book.CatID))%>
<%= Html.ValidationMessage("CatID", "*")%>
<%= Html.TextBox("book[" + i + "].BookTitle", book.BookTitle)%>
<%= Html.ValidationMessage("BookTitle", "*")%>
<br />
<%i++;
} %>
</fieldset>
<% } %>
次に、メインビューページにリンクを追加します。リンクがクリックされたら、JavaScript/jQuery/Ajax/whateverを使用していくつかのことを実行します。最初に実現したいのは、部分ビューからBooksフォーム(id = booksform)を送信し、次の jQuery 関数に進むことです。そこで、JavaScript関数を呼び出すリンクをクリックします。この関数は、Booksフォームの送信を呼び出し/実行/実行する必要があります。
私はすべてを試したように感じますが、完全なページの送信/更新が行われないと、書籍のフォームを送信して処理することができません。 (注、完全な送信が行われると、コントローラーで期待するアクションが正常に処理されます)。コントローラのプロセス/アクションが何らかの成功/失敗の表示以外を返さないようにします。 (その後、「LoadBooks();」を再度呼び出して、ページのDIVを更新できます。
何か案は?
これは私がjqueryでそれを行う方法です:
function DoAjaxPostAndMore(btnClicked)
{
var $form = $(btnClicked).parents('form');
$.ajax({
type: "POST",
url: $form.attr('action'),
data: $form.serialize(),
error: function(xhr, status, error) {
//do something about the error
},
success: function(response) {
//do something with response
LoadBooks();
}
});
return false;// if it's a link to prevent post
}
BtnClickedはフォーム内にあると仮定しました。
<input type="button" value="Submit" onclick="DoAjaxPostAndMore(this)"/>
リンクの場合:
<a href="/url/something" onclick="return DoAjaxPostAndMore(this)">linktext</a>
リンクがフォーム内にない場合は、jqueryセレクターを使用して検索するだけです。 idをフォームに設定してから、次のようなフォームを見つけることができます。
var $form = $("#theformid");
Ajax.BeginForm
ではなく、Html.BeginForm
を使用する必要がありますか?
「onclick」JavaScript関数が実行され、問題は全ページの送信/更新が発生することですas(?この場合、問題はJavaScript関数をreturn false
で終了しないことです。
または、「onclick」JavaScript関数がまったく呼び出されないという問題がありますか?その後、コードを見ずに言うのは難しいです... JQueryセレクターを使用する場合-おそらくセレクターによってリンクが選択されない
<a href = "javascript: SaveProperties();">Save properties</a>
SaveProperties() { $('#bevpropform').submit(); }
前に言ったように
SaveProperties() { $('#bevpropform').submit(); return false; }
これは「誰かを助けることができる場合」の答えです。なぜなら、私はゲームに非常に遅れているからです。
@using (Ajax.BeginForm("Method", "Controller", new AjaxOptions { HttpMethod = "POST" }))
{
}
日付が投稿されると、ページは更新されません。
ご注意ください
[〜#〜] must [〜#〜]これを機能させるには、jquery.unobtrusive-ajax.js
を追加します。 ASP.NET MVC5テンプレートプロジェクトでは、このスクリプトはデフォルトでnotに含まれていることに注意してください。手動で追加するか、Nugetパケットマネージャーを使用して追加する必要があります。
デフォルトで含まれるjquery.validate.unobtrusive.js
とは関係ありません。