我有一个ajax形式:
@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");
}
该表单位于操作索引中,我没有查看更改密码!
提交表格后,我得到:
- 包含我发送的内容的空白页
- url 更改为 .../ChangePassword?length=7(之前是/index)
我不知道这个长度参数是从哪里来的。
所以我的问题是如何保持相同的视图并在正确的div 中获得结果?
任何知道参数长度来自哪里的人,我已经有过几次这个问题了。
如果有人遇到有关长度参数的问题(上面的第二个问题),您可以更改方法调用,如下所示:
@using (Ajax.BeginForm("ChangePassword", "Account", new AjaxOptions { HttpMethod = "POST", UpdateTargetId="result" }, new { @class = "form-horizontal", role = "form", id = "changePasswordForm" }))
//to:
@using (Ajax.BeginForm("ChangePassword", "Account", null, new AjaxOptions { HttpMethod = "POST", UpdateTargetId="result" }, new { @class = "form-horizontal", role = "form", id = "changePasswordForm" }))
长度参数/ChangePassword?length=7 将消失。 长度来自控制器名称"帐户"中的字符数。
请确保在标头中包含 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>>
你必须使用这样的一些:
return RedirectToAction("ViewName", [new { args } OR model]);
内容结果可用于以纯文本形式返回到操作。此类继承自"ActionResult"抽象类。