我们正在编写一个ASP.NET MVC3应用程序,并且想要“丰富”,例如使用bootstrap和modal对话框。
我现在想知道如何实现模态对话框,而不会破坏ASP.NET中的所有酷工作人员(ModelErrors,...)。
工作流程应如下所示:
带有项目列表的IndexView,每个项目都带有一个显示模态对话框的actionlink
@Ajax.ActionLink(
"Edit", // Link Text
"Edit", // ActionMethod
new { id = item.Id }, // RouteValues
new AjaxOptions {
HttpMethod = "Get",
OnBegin = "modal.showModalDiv()",
InsertionMode = InsertionMode.Replace,
UpdateTargetId = "modal-div",
OnSuccess = "modal.ajaxSuccess()" },
new { data-toggle = "edit-modal" } // HTML-Attributes
)
模态对话框(用css设计的简单div)呈现editview(从控制器actionmethode返回)
[HttpGet]
public ActionResult Edit(int id) {
// Load Data and create Model
var model = new ...
return PartialView(model);
}
编辑视图中的表单可用于编辑项目,包括客户端验证
@{
AjaxOptions ajaxOptions = new AjaxOptions() {
HttpMethod = "Post", OnSuccess="modal.hideModalDiv()"
};
}
@using (Ajax.BeginForm("Edit"), ajaxOptions){
... element to edit item ...
<input type="submit" value="submit" />
}
当提交编辑控制器 - 方法识别错误(未被客户端验证捕获)时,页面应再次显示模型错误。另外应该显示索引页面或刷新表格并关闭模态对话框。
[HttpPost]
public ActionResult Edit(Guid id, ItemModel model) {
try{
...Save Item ...
return RedirectToAction("Index")
} catch (Exception ex){
ModelState.AddModelError("", "An error occured")
return PartialView(model);
}
}
我的问题是:如何实施第4步?有人有建议吗?
答案 0 :(得分:0)
试试这个,
[HttpPost]
public ActionResult Edit(Guid id, ItemModel model)
{
if(model != null && ModelState.IsValid)
{
return RedirectToAction("Index")
}
else
{
return PartialView(model);
}
}
答案 1 :(得分:0)
我猜你已经解决了这个问题或者找到了解决方法,但是如果你没有我怀疑你是否要返回包含javascript的部分视图来进行重定向,你可以得到你描述的行为。
例如:
RedirectToIndex.cshtml
@{ Layout = null; }
<script type="text/javascript">
window.location.href = "@Url.Action("Index")";
</script>
然后更新您的操作以返回此部分视图。
[HttpPost]
public PartialViewResult Edit(Guid id, ItemModel model) {
try{
//Save Item ...
return PartialView("RedirectToIndex")
} catch (Exception ex){
ModelState.AddModelError("", "An error occured");
return PartialView(model);
}
}
不是最优雅但应该有效,我说应该因为我没有测试过这个...