编辑模型 - 还有更好的方法吗?

时间:2014-09-17 01:52:39

标签: asp.net-mvc-5

我的表单上有一个WebGrid,其中一列的ActionLink为:

Html.ActionLink((string)item.Name, "Edit", new { id = item.Id })

以下代码的目的是将“编辑”屏幕显示为“模态”弹出窗口并成功发布更新对象。

控制器 - 获取:

public ActionResult Edit(int id)
{
    ... //Fetch employeeViewModel @id
    TempData["StateData"] = employeeViewModel ;
    TempData["ViewState"] = "Edit";

    return RedirectToAction("Index");
}

Index.cshtml:

@if (TempData.ContainsKey("ViewState") && TempData["ViewState"].ToString() == "Edit")
{
    EmployeeViewModel employeeViewModel = (employeeViewModel)TempData["StateData"];
    @Html.Partial("_EditEmployee", employeeViewModel)

    <script language="javascript">
        $(window).load(function() {
            $('#editEmployeeModal').modal('show');
        });
    </script>
}

编辑表格:

<div class="modal fade" id="editEmployeeModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
    <div class="modal-dialog">
...

所有这一切都可以正常使用Get / Post模型的完整循环进行编辑。 但是,我担心我在Controller-Get方法中的额外旅行:

return RedirectToAction("Index");

有人可以指导一下更好的方法吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

只是一个通用指针:您不需要去服务器在浏览器中弹出模式对话框。你可以在javascript中做到这一点。一些常见的JavaScript库已经有模式弹出窗口,您可以使用/自定义/借用等,以满足您的需求。只需google&#34; javascript弹出窗体&#34;了解大量信息。

答案 1 :(得分:0)

  

以下代码的目的是将“编辑”屏幕显示为“模态”弹出窗口并成功发布更新对象。

在直接回答你的问题之前,我想谈谈这个问题。你需要确保模态是正确的选择。你需要保留一些州吗?模态是否提供更好的用户体验?模态是否适用于跨平台和旧技术?

使用模态几乎总是比简单地重定向到另一个页面然后返回更复杂。根据用户体验来衡量额外的复杂性。如果没有理由那么放弃它。还要想想你最终会遇到的奇怪情况。当你的模态需要打开另一个模态时会发生什么?

现在真正的问题......如何让它发挥作用。简而言之,使用AJAX。

@Html.ActionLink((string)item.Name, "Edit", new { id = item.Id })

让它打开模态。模态包含一个AJAX表单元素(Ajax.BeginForm())和POST到您的编辑操作。

现在没有重定向。当动作完成时,通过Ajax表单AjaxOptions执行javascript函数设置,关闭模态(或显示验证)。用户永远不会离开整个过程。