2014-02-15 41 views
0

我有一个Ajax形式:阿贾克斯形式改变URL

@model Site.Models.ChangeModel 
@using (Ajax.BeginForm("ChangePassword", "Account", new AjaxOptions { HttpMethod = "POST", UpdateTargetId="result" }, new { @class = "form-horizontal", role = "form", id = "changePasswordForm" })) 
{ 
    <div id="result"></div> 
    @Html.AntiForgeryToken() 

    @Html.ValidationSummary(true, Base.ChangesNotSubmitted, new { @class = "alert alert-danger" }) 

    @Html.EditorFor(m => m.ChangePasswordModel.OldPassword) 

    @Html.EditorFor(m => m.ChangePasswordModel.Password) 

    @Html.EditorFor(m => m.ChangePasswordModel.ConfirmPassword) 

    <div class="form-group"> 
     <div class="col-sm-offset-6 col-sm-2"> 
      <button type="submit" class="btn btn-primary">@Base.ChangePassword</button> 
     </div> 
    </div> 
} 

通过这项行动

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult ChangePassword(ChangePasswordModel model) 
    { 
     bool changed=false; 
     if (ModelState.IsValid) 
     { 
      var result = UserManager.ChangePassword(User.Identity.GetUserId(), model.OldPassword, model.Password); 
      if (result.Succeeded) 
      { 
       changed = true; 
      } 
     } 

     return Content("changed"); 

    } 

的形式位于操作指数,和我没有视图ChangePassword!

提交sform后我得到:

  • 与内容的空白页我已经发送
  • URL被改变.../ChangePassword长度= 7(之前是/指数)

我不知道这个长度参数来自哪里。

所以我的问题是如何留在相同的观点,并得到正确的结果div?

任何人的任何想法,参数长度来自我已经有这个问题几次了。

+0

您是否引用了所有必需的脚本?我用'Ajax.BeginForm()'看到的最常见的问题是不引用所有脚本或者以错误的顺序引用它们。 – HTX9

回答

0

您必须使用一些像这样:

return RedirectToAction("ViewName", [new { args } OR model]); 

的ContentResult类型可以用来恢复到动作为纯文本。这个类继承自“ActionResult”抽象类。

+0

但阿贾克斯假设留在同一页面,为什么它呈现给我另一个页面是奇怪:( – Alnedru

+0

为例exam我有一个div扩大但提交后它关闭:/这是一个正确的行为? – Alnedru

+0

是的,因为你的ajax替换形式:pdateTargetId =“结果” – melvas

0

请确定您已在头文件中包含ajax javascript文件。

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