ASP.NET MVC3:Modal对话框中的EditView

时间:2014-03-04 07:40:33

标签: javascript jquery asp.net asp.net-mvc-3 razor

我们正在编写一个ASP.NET MVC3应用程序,并且想要“丰富”,例如使用bootstrap和modal对话框。

我现在想知道如何实现模态对话框,而不会破坏ASP.NET中的所有酷工作人员(ModelErrors,...)。

工作流程应如下所示:

  1. 带有项目列表的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
    )
    
  2. 模态对话框(用css设计的简单div)呈现editview(从控制器actionmethode返回)

    [HttpGet]
    public ActionResult Edit(int id) {
        // Load Data and create Model
        var model = new ...
        return PartialView(model);
    }
    
  3. 编辑视图中的表单可用于编辑项目,包括客户端验证

    @{
         AjaxOptions ajaxOptions = new AjaxOptions() {
              HttpMethod = "Post", OnSuccess="modal.hideModalDiv()"
         };
    }
    @using (Ajax.BeginForm("Edit"), ajaxOptions){
    
    
        ... element to edit item ...
    
        <input type="submit" value="submit" />
    }
    
  4. 当提交编辑控制器 - 方法识别错误(未被客户端验证捕获)时,页面应再次显示模型错误。另外应该显示索引页面或刷新表格并关闭模态对话框。

    [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);
          }
    
    }
    
  5. 我的问题是:如何实施第4步?有人有建议吗?

2 个答案:

答案 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);
    }
}

不是最优雅但应该有效,我说应该因为我没有测试过这个...