ASP.NET MVC 4 AJAX提交表单不起作用

时间:2012-01-30 15:25:25

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

我正在尝试使用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>

3 个答案:

答案 0 :(得分:27)

  

我有什么遗失的吗?

也许你错过了不引人注目的ajax脚本:

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

答案 1 :(得分:0)

如果我理解正确,你试图将数据发布到控制器,成功后你需要去主页?如果没有,你能澄清吗?所以这将试图帮助你

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
    }

答案 2 :(得分:0)

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

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

我认为你必须用 .on 更改4次,现在它可以正常工作; - )