我的表单上有一个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");
有人可以指导一下更好的方法吗?
谢谢!
答案 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函数设置,关闭模态(或显示验证)。用户永远不会离开整个过程。