Подтвердить что ты не робот

MVC jQuery отправить форму (без обновления страницы) из функции JavaScript

Я новичок в этом. Я использую ASP.NET MVC С# 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 = "Книги", только с категорией книг и названием книги):

<%@ 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/что угодно. Первое, что я хочу сделать, - отправить форму Books (id = booksform) из частичного представления, а затем перейти к следующему jQuery. Таким образом, я нажимаю ссылку, которая вызывает функцию JavaScript. Эта функция должна вызывать/выполнять/выполнять подачу формы Книги.

Мне кажется, что я все пробовал, но я не могу получить свою форму для отправки и обработки без полной отправки/обновления страницы. (Обратите внимание, что когда полный запрос выполняется, действия, которые я ожидаю в контроллере, будут успешно выполнены). Я хочу, чтобы процесс/действие контроллера не возвращали ничего, кроме какого-либо индикатора успеха/отказа. (Затем я могу вызвать "LoadBooks();" снова, чтобы обновить DIV на странице.

Любые идеи?

4b9b3361

Ответ 1

Вот как я делаю это с 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 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");

Ответ 2

Это Ajax.BeginForm, который вам нужно использовать, а не Html.BeginForm.

Ответ 3

Выполняется ли ваша функция "onclick" JavaScript, и проблема в том, что полная отправка/обновление страницы происходит , а? В этом случае проблема заключается в том, что вы не заканчиваете свою функцию JavaScript с помощью return false.

Или проблема в том, что ваша функция JavaScript onclick не вызывается вообще? Тогда трудно сказать, не глядя на код... Если вы используете селектор JQuery - тогда, вероятно, ссылка не будет выбрана селектором

Ответ 4

<a href = "javascript: SaveProperties();">Save properties</a>
SaveProperties() { $('#bevpropform').submit(); }

Как я уже говорил, должен быть

SaveProperties() { $('#bevpropform').submit(); return false; }

Ответ 5

Это ответ "если это может помочь кому-то", потому что я очень опаздываю на игру, но вы также можете использовать:

@using (Ajax.BeginForm("Method", "Controller", new AjaxOptions { HttpMethod = "POST" }))
{
}

Когда дата будет опубликована, страница не будет обновлена.


ОБРАТИТЕ ВНИМАНИЕ

Вы ДОЛЖНЫ добавить jquery.unobtrusive-ajax.js, чтобы это работало. Будьте осторожны, в проекте шаблона ASP.NET MVC5 этот script включен не по умолчанию, вы должны добавить его вручную или добавить его через диспетчер пакетов Nuget.
Он не связан с jquery.validate.unobtrusive.js, который включен по умолчанию.