【发布时间】:2013-10-07 09:27:10
【问题描述】:
我目前正在以实习生的身份从事 ASP.NET MVC 4 项目,并且正在尝试实现管理面板。目标是在网格 (MVC.GRID) 上显示所有用户并在同一页面上对其进行编辑。 我已经设法在网格上显示所有用户,一旦选择了用户,它就会在网格下方显示信息并将其放入表单中(通过 ajax/jquery)。
问题是:表单验证显示在新页面上,而不是网格所在的页面上。我不知道为什么..
下面是我的代码。
这是放置表单的位置:
<div id="order-content">
<p class="muted">
Select a user to see his or her information
</p>
</div>
表单本身(部分视图“_UserInfo):
@using (Ajax.BeginForm("EditUser", "Admin", FormMethod.Post,
new AjaxOptions
{
InsertionMode = InsertionMode.Replace,
HttpMethod = "POST",
UpdateTargetId = "order-content"
}))
{
@Html.Bootstrap().ValidationSummary()
@Html.Bootstrap().ControlGroup().TextBoxFor(x => x.Id)
@Html.Bootstrap().ControlGroup().TextBoxFor(x => x.Name)
@Html.Bootstrap().ControlGroup().TextBoxFor(x => x.Password)
@Html.Bootstrap().SubmitButton().Text("Opslaan").Style(ButtonStyle.Primary)
}
选择一行后显示用户信息的 JQuery:
$(function () {
pageGrids.usersGrid.onRowSelect(function (e) {
$.post("/Admin/GetUser?id=" + e.row.Id, function (data) {
if (data.Status <= 0) {
alert(data.Message);
return;
}
$("#order-content").html(data.Content);
});
});
});
我的管理员控制器:
[HttpPost]
public JsonResult GetUser(int id)
{
var user = _UserService.Get(id);
var input = _EditInputMapper.MapToInput(user);
if (user == null)
return Json(new { Status = 0, Message = "Not found" });
return Json(new { Content = RenderPartialViewToString("_UserInfo", input) });
}
[HttpPost]
public ActionResult EditUser(AdminUserEditInput input)
{
if (ModelState.IsValid)
{
// todo: update the user
return View();
}
// This is where it probably goes wrong..
return PartialView("_UserInfo",input);
}
谁能看到我的代码有什么问题?
谢谢。
【问题讨论】:
-
在“订单内容”中,您正在显示“_UserInfo”。并且这个 _UserInfo 与模型数据绑定。所以模型验证应该显示在“订单内容”中。不是吗?还是我不明白你的问题?
-
是的。但是当我提交空字段时,页面会重新加载并显示我的表单并进行验证,但我的网格消失了。似乎 mvc 创建了一个新页面,其中只有部分视图。
-
检查ajax提交,可以使用Firebug检查...页面不应该在ajax提交的情况下重新加载
标签: c# jquery ajax asp.net-mvc mvcgrid