【问题标题】:ASP.NET MVC 4 AJAX Submit Form not workingASP.NET MVC 4 AJAX 提交表单不起作用
【发布时间】:2012-02-22 09:17:32
【问题描述】:

我正在尝试使用 MVC 4 中的 Ajax.BeginForm 辅助方法将表单从同步转换为异步。

在我看来,我有:

   @{
        ViewBag.Title = "Users > Edit";
        var options = new AjaxOptions()
                          {
                              Url = Url.Action("Edit", "User"),
                              LoadingElementId = "saving",
                              LoadingElementDuration = 2000,
                              Confirm = "Are you sure you want to save this User?"
                          };  
    }

    <div id="saving" style="display:none; color:Red; font-weight: bold"> 
         <p>Saving...</p> 
    </div> 

    @using (Ajax.BeginForm(options)) 
    {
        @Html.ValidationSummary(true)
        <fieldset>
            .... FIELDS ...
            <p>
                <input type="submit" value="Save" />
            </p>
        </fieldset>
    }

单击提交按钮时,将执行完整的回发。我的操作方法如下所示:

[HttpPost]
public ActionResult Edit(User user)
{
    if (ModelState.IsValid)
    {
        _repository.Save(user);
        TempData["message"] = String.Format("{0} has been saved.", user.Username);
    }

    return View(user);
 }

我有什么遗漏吗? MVC 4 当前版本是否存在一些问题?

在我的 Web.Config 中,我确实将 ClientValidationEnabled 和 UnobtrusiveJavaScriptEnabled 设置为 true。

我的 _Layout.cshtml 中也指定了这些:

    <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>

【问题讨论】:

  • 重要提示; jquery-1.9.0.min.js 不支持 Ajax.FormBegin 和 Ajax.ActionLink :(

标签: asp.net ajax asp.net-mvc asp.net-mvc-4


【解决方案1】:

我有什么遗漏吗?

也许你错过了不显眼的 ajax 脚本:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>

【讨论】:

  • 是的,你发现了!有 validate.unobtrusive.js 等等等等。Doh!谢谢:D
【解决方案2】:

如果我理解正确,您正在尝试将数据发布到控制器,成功后您需要转到主页??如果不是,你能澄清一下。这样会尽力帮助你

if (ModelState.IsValid)
    {
        _repository.Save(user);
        TempData["message"] = String.Format("{0} has been saved.", user.Username);
        return RedirectToAction("yourActionToRedirect");  // after succesfull it will go to the index view
    }

【讨论】:

  • 在这个例子中,我实际上想用相同的用户数据返回到当前视图,例如返回视图(用户);
  • 那是什么问题??是否尝试调试它?它是否在用户控制器上执行操作??
  • 它的行为不是异步的。该页面正在回发,并且 Request.IsAjaxRequest() 在 Edit 操作中返回 false。
【解决方案3】:

我遇到了同样的问题...我已经用 nuget 包控制台更新了所有的 js 文件。

只是我的 2 美分,而且在撰写本文时,jquery.unobtrusive.ajax 文件确实包含对已弃用的 jquery 函数 '.live' 的调用(=>它已从 jquery 1.9 中删除+ 版本)jquery live

我认为您必须使用 .on 更改 4 次出现的情况,现在它可以正常工作了 ;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-21
    • 1970-01-01
    • 2020-10-21
    • 1970-01-01
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多