Phi*_*egg 5 asp.net-mvc asp.net-mvc-3
更新 - 有很多关于子操作的帖子不允许在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>
Run Code Online (Sandbox Code Playgroud)
在模态的主体内部,我使用@Html.Action帮助器来调用FranchiseController的Create方法:
@Html.Action("Create", "Franchise", new { FranchiseSetId = Model.FranchiseSetID })
Run Code Online (Sandbox Code Playgroud)
这是从中生成的模态:

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();
}
}
Run Code Online (Sandbox Code Playgroud)
在return 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", "Franchise", FormMethod.Post))
{
<div id="create_franchise_modal_body" class="modal-body">
@{ Html.RenderAction("Create", "Franchise", 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>
Run Code Online (Sandbox Code Playgroud)
我还修改了控制器的Create方法,如上面提到的Russell.
使用这个: @{ Html.RenderAction("Create", "Franchise", new { FranchiseSetId = Model.FranchiseSetID }); }
@{ }因为我在这里学到的东西,我把它放在标签内: Html.RenderPartial给了我奇怪的过载错误?
我能够让FranchiseController重定向回其父级 - FranchiseSetController的Index方法 - 没有任何问题.此外,它不需要我返回JSON并尝试进行JavaScript重定向 - 它是所有Razor视图代码.
我希望这解决了如何将子操作重定向回Parent的问题.
为你的模态尝试这个:
\n\n<div class="modal hide fade in" id="myModal" )>\n <div class="modal-header">\n <button type="button" class="close" data-dismiss="modal">\xc3\x97</button>\n <h3>Modal header</h3>\n </div>\n @using (Html.BeginForm("Create", "Franchise", FormMethod.Post))\n {\n <div id="create_franchise_modal_body" class="modal-body">\n @Html.RenderPartial("Create")\n </div>\n <div class="modal-footer">\n <a href="#" class="btn" data-dismiss="modal">Close</a>\n <button type="submit" class="btn btn-primary">Save changes</button>\n </div>\n }\n </div>\nRun Code Online (Sandbox Code Playgroud)\n\n然后在控制器中修复 GET 方法,使其返回部分视图结果
\n\n//\n// GET: /Franchise/Create\n\npublic PartialViewResult Create(int FranchiseSetId)\n{\n ViewBag.PossibleFranchiseSets = franchisesetRepository.All;\n var franchise = new Franchise { FranchiseSetId = FranchiseSetId };\n return PartialView(franchise);\n} \nRun Code Online (Sandbox Code Playgroud)\n\n我在此修复中做了一些假设。
\n\n@Html.Action("Create", "Franchise", new { FranchiseSetId = Model.FranchiseSetID })您想要渲染该部分视图如果我错过了某些内容,请告诉我,我将更新我的答案以尝试提供更好的解决方案。
\n| 归档时间: |
|
| 查看次数: |
16673 次 |
| 最近记录: |