MVC jQuery从JavaScript函数提交表单(没有页面刷新)

joh*_*kes 33 ajax asp.net-mvc jquery form-submit

我对这一切都很陌生.我正在使用ASP.NET MVC C#LINQ to SQL.

我有一个编辑页面,可以加载作者及其所有书籍.通过Ajax调用加载Books .

    <script type="text/javascript">
        $(document).ready(function() {
            LoadBooks();
        });

        function LoadBooks() {
          $(".Books").hide();
          $(".Books").load("/Books/Edit/<%= Model.AuthorID %>");
          $(".Books").show('slow');
        }
     </script>
Run Code Online (Sandbox Code Playgroud)

这部分工作正常.页面加载作者信息,然后加载书籍(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>
     <% } %>
Run Code Online (Sandbox Code Playgroud)

现在,在主视图页面上我想要一个链接.点击链接后,我想通过JavaScript/jQuery/Ajax /做任何事情.我想要发生的第一件事是从部分视图提交Books表单(id = booksform),然后继续下一个jQuery函数.所以,我点击一个调用JavaScript函数的链接.此函数应调用/执行/执行Books表单的提交.

我觉得我已经尝试了所有的东西,但是我无法在没有完整页面提交/刷新的情况下提交和处理我的图书表单.(注意,当完整提交确实发生时,我在控制器中期望的操作会成功处理).我希望控制器进程/操作除了某种成功/失败指示之外什么也不返回.(然后我可以再次调用"LoadBooks();"来刷新页面上的DIV.

有任何想法吗?

Mis*_* N. 62

我就是这样用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

}
Run Code Online (Sandbox Code Playgroud)

我假设btnClicked在表单内:

<input type="button" value="Submit" onclick="DoAjaxPostAndMore(this)"/>
Run Code Online (Sandbox Code Playgroud)

如果链接:

  <a href="/url/something" onclick="return DoAjaxPostAndMore(this)">linktext</a>
Run Code Online (Sandbox Code Playgroud)

如果链接不在表单内部,您只需使用jquery选择器来查找它.您可以将id设置为表单,然后找到如下形式:

var $form = $("#theformid");
Run Code Online (Sandbox Code Playgroud)

  • HOLY CRAP IT工作!!! 我已经花了3天时间试着获得这个愚蠢的语法!我爱你!!! (29认同)