ASP.NET MVC 4 - 使用儿童行动莫代尔保存后重定向(ASP.NET MVC 4 - R

2019-07-30 04:17发布


更新 -现在有很多关于儿童的行为是不允许进行重定向 SO和ASP.NET论坛行动职位。 下面的解决方案似乎是我见过的这个问题的简单的解决方法。 如果你有这个问题 - 希望你会发现它有用。 如果有一个更好的,我当然愿意听听建议。


我整天都令人头大我的大脑与此...

我有一个FranchiseSet模式和特许经营模式-的关系是一个FranchiseSet具有一对多的特许经营。

在FranchiseSet索引视图有特权集,其中每一行是可点击的表。 当我点击一排,我返回从FranchiseSetController详细方法的视图-通过AJAX。

在这种观点是有也是一个表,显示了该特许经营集合所有相关的特许经营。 从本质上讲,它是一个主/详细信息视图-这里是什么样子:

有正在用来显示加盟店创建形式的Twitter的引导模式。 这里是什么样子:

<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的创建方法:

@Html.Action("Create", "Franchise", new { FranchiseSetId = Model.FranchiseSetID })

下面是从生成的模式:

Create方法成功地保存新的特权,但是,我得到这个错误:

儿童的行为是不允许进行重定向操作。

我见过的StackOverflow上的帖子和ASP.NET论坛在这个问题上的 ,和我试图实施一些解决方案-即使使用JavaScript重定向,但我还没有能够得到这个工作。

我明白,因为我已经是FranchiseSet控制器内,它已经在试图渲染基础上,FranchiseSet模型的图,所以孩子视图 - 特许经营模式的 - 是不确定的。 那么,什么是处理中父母与子女的行为相互作用的理想方式?

这似乎是没有通用的解决方案非常普遍的问题。 或者至少不是一个,我可以找到。 我是比较新的.NET MVC所以这可能只是我。

使用@Html.Action一个糟糕的设计选择在这种情况下? 我曾尝试使用@Html.RenderPartial但导致500内部服务器错误-即使我有创建方法设置返回的局部视图。

下面是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();
    }
}

return RedirectToAction("Index", "FranchiseSet"); 在用连词@Html.Action从视图似乎是问题的根源。

任何意见非常感谢!



我使用的改性模态代码,罗素以下建议,但是我切换@ Html.RenderPartial方法用于码块内的@ Html.RenderAction方法。

这里是什么样子了。

<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>

我还修改了控制器的像罗素创建方法上面建议。

使用此: @{ Html.RenderAction("Create", "Franchise", new { FranchiseSetId = Model.FranchiseSetID }); } @{ Html.RenderAction("Create", "Franchise", new { FranchiseSetId = Model.FranchiseSetID }); }

我把它的内@{ }因为我在这里学到标签: Html.RenderPartial给我怪过载错误?

我能得到的FranchiseController重定向回其母公司 - 中FranchiseSetController的指数方法 - 使用没有问题。 再加上它并没有要求我返回JSON和尝试做一个JavaScript重定向 - 这一切都Razor视图代码。

我希望这是解决了如何从儿童的行动回重定向问题。

Answer 1:

试试这个为你的模式:

<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.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);
} 

我已经做了几个假设在此修复程序。

  1. 您的“创建”的观点应该是有所有的形式输入的局部视图
  2. 当你调用@Html.Action("Create", "Franchise", new { FranchiseSetId = Model.FranchiseSetID })你是想渲染局部视图
  3. 你想在模式底部的“保存更改”链接实际保存模式和显示不是“创建”按钮

如果我错过了一些东西让我知道,我会更新我的答案,试图提供一个更好的解决方案。



文章来源: ASP.NET MVC 4 - Redirect after Modal Save using Child Action