asp.net-mvc – ASP.NET MVC 4 – 使用子操作进行模态保存后重定
更新 – 有很多关于子操作的帖子不允许在SO和ASP.NET论坛上执行重定向操作.下面的解决方案似乎是我在这个问题上看到的最简单的解决方法.如果你有这个问题 – 希望你会发现它有用.如果有更好的,我肯定愿意接受建议.
这一整天我一直在震撼我的大脑…… 我有一个FranchiseSet模型和一个Franchise模型 – 关系是FranchiseSet有很多特许经营权. 在FranchiseSet索引视图中,有一个特许经营集表,其中每一行都是可点击的.当我单击一行时,我从FranchiseSetController的Details方法返回一个视图 – 通过AJAX. 在该视图中还有一个表格,显示该特许经营集合的所有相关特许经营权.从本质上讲,它是一个主/细节视图 – 这是看起来像: 有一个Twitter Bootstrap模式用于显示特许经营的创建表单.这是看起来像: <div class="modal hide fade in" id="myModal" )> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3>Modal header</h3> </div> <div id="create_franchise_modal_body" class="modal-body"> @Html.Action("Create","Franchise",new { FranchiseSetId = Model.FranchiseSetID }) </div> <div class="modal-footer"> <a href="#" class="btn" data-dismiss="modal">Close</a> <a href="#" class="btn btn-primary">Save changes</a> </div> </div> 在模态的主体内部,我使用@ Html.Action帮助器来调用FranchiseController的Create方法: @Html.Action("Create",new { FranchiseSetId = Model.FranchiseSetID }) 这是从中生成的模态: Create方法成功保存新的Franchise,但是,我收到此错误: 不允许子操作执行重定向操作. 我已经在这个问题上看到很多关于StackOverflow和ASP.NET论坛的帖子,我试图实现一些解决方案 – 甚至使用JavaScript重定向,但我仍然无法使其工作. 我理解,因为我已经在FranchiseSet控制器内,它已经尝试基于FranchiseSet模型渲染视图,所以未定义特许模型的子视图.那么处理父母和孩子行为之间的互动的理想方式是什么? 如果没有通用的解决方案,这似乎是一个非常普遍的问题.或者至少没有一个我能找到的.我对.net mvc比较新,所以它可能只是我. 在这种情况下,使用@ Html.Action是一个糟糕的设计选择吗?我试图使用@ Html.RenderPartial,但这会导致500内部服务器错误 – 即使我有Create方法设置来返回局部视图. 以下是我正在使用的FranchiseController创建操作 – GET和POST – : // // GET: /Franchise/Create public ActionResult Create(int FranchiseSetId) { ViewBag.PossibleFranchiseSets = franchisesetRepository.All; var franchise = new Franchise { FranchiseSetId = FranchiseSetId }; return PartialView(franchise); } // // POST: /Franchise/Create [HttpPost] public ActionResult Create(Franchise franchise) { if (ModelState.IsValid) { franchiseRepository.InsertOrUpdate(franchise); franchiseRepository.Save(); return RedirectToAction("Index","FranchiseSet"); } else { ViewBag.PossibleFranchiseSets = franchisesetRepository.All; return View(); } } 返回RedirectToAction(“Index”,“FranchiseSet”);与视图中的@ Html.Action一起似乎是问题的根源. 任何建议都非常感谢! 解 我使用了Russell在下面提出的修改后的模态代码,但是我在代码块中为@ Html.RenderAction方法切换了@ Html.RenderAart方法. 这就是现在的样子. <div class="modal hide fade in" id="myModal" )> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3>Modal header</h3> </div> @using (Html.BeginForm("Create",FormMethod.Post)) { <div id="create_franchise_modal_body" class="modal-body"> @{ Html.RenderAction("Create",new { FranchiseSetId = Model.FranchiseSetID }); } </div> <div class="modal-footer"> <a href="#" class="btn" data-dismiss="modal">Close</a> <button type="submit" class="btn btn-primary">Save changes</button> </div> } </div> 我还修改了控制器的Create方法,如上面提到的Russell. 使用这个:@ {Html.RenderAction(“Create”,“Franchise”,new {FranchiseSetId = Model.FranchiseSetID}); } 因为我在这里学到的东西,我把它放在@ {}标签内:Html.RenderPartial giving me strange overload error? 我能够让FranchiseController重定向回其父级 – FranchiseSetController的Index方法 – 没有任何问题.此外,它不需要我返回JSON并尝试进行JavaScript重定向 – 它是所有Razor视图代码. 我希望这解决了如何将子操作重定向回Parent的问题. 解决方法
试试你的模态:
<div class="modal hide fade in" id="myModal" )> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal">×</button> <h3>Modal header</h3> </div> @using (Html.BeginForm("Create",FormMethod.Post)) { <div id="create_franchise_modal_body" class="modal-body"> @Html.RenderPartial("Create") </div> <div class="modal-footer"> <a href="#" class="btn" data-dismiss="modal">Close</a> <button type="submit" class="btn btn-primary">Save changes</button> </div> } </div> 然后在您的控制器中,修复您的GET方法,以便返回部分视图结果 // // GET: /Franchise/Create public PartialViewResult Create(int FranchiseSetId) { ViewBag.PossibleFranchiseSets = franchisesetRepository.All; var franchise = new Franchise { FranchiseSetId = FranchiseSetId }; return PartialView(franchise); } 我在这个修复中做了几个假设. >您的“创建”视图应该是包含所有表单输入的部分视图 如果我错过了一些让我知道的内容,我会更新我的答案,试着提供更好的解决方案. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- 深度探秘.NET 5.0
- asp.net-mvc – Microsoft MVC 4,APIController和适当的RES
- asp.net – 如何以编程方式将SMTP服务器详细信息存储(保存)
- asp.net – 名称空间“CrystalDecisions.Web”中不存在类型
- asp.net – 在内容页面的主页面上设置属性值
- asp.net – 我可以在html源代码中看到ViewStateUserKey吗?
- asp.net – 解决.net Web应用程序中的可伸缩性和性能问题
- asp.net – 最早我可以访问global.asax中的一些Session数据
- asp.net-mvc – ASP.NET MVC 3 Treeview
- asp.net-mvc-4 – IE中的MVC VS2012 jquery.validate.js错误