2014-02-15 64 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>>