MVC视图中的两个局部视图

时间:2014-01-30 22:14:59

标签: asp.net-mvc asp.net-mvc-5

我有以下场景,我在视图(View1)中有一个模型(名为模型A)。

此视图最初加载局部视图(部分视图1)

点击部分视图的按钮,我试图将生成的ID传递给另一个局部视图(部分视图2)。

但是我收到错误,指出无法找到View 1,第一次运行时没有遇到任何问题。

如果我删除了else语句,页面会在提交后成功重新加载。

有关将此模型对象成功传递到其他视图的任何提示。 我把id = 1并测试它并发生了同样的错误。  我尝试了RenderAction,RenderPartial以及所有这些失败的

页面

@model MyModel

     @{ 

      if (ViewBag.Created ==0) {
             @Html.Partial("CreateView1",Model);
        }
      else
      {
          { Html.Action("Action2", "Area/Controller2", new { id = Model.Id }); }

      }
    }

控制器方法:

控制器1:进入观点

[Route("{CreateView1}")]
    public ActionResult Create() {
        ViewBag.Created = 0;
        return View(new MyModel());
    }

   [Route("{CreateView1}")]
   [HttpPost]
    public ActionResult Create(MyModel model) {
     ........................... 
    ViewBag.Created = 1;

    }

控制器2,它呈现第二个局部视图:

   public PartialViewResult Index(int createdId)
        {
            return PartialView(new List<Model2>());
        }

3 个答案:

答案 0 :(得分:3)

关于View 1 cannot be found,是因为您的第二个return操作中的关键字Create丢失了。单击按钮会将表单提交到Create方法,并带有[HttpPost]属性,方法结束时需要返回View。

注册Any tips on passing this model object successfully to the other view please,第二个return方法中的Create应该是return View(model);而不是'返回View(新的MyModel);`稍后在查看中将使用该模型。

Re I put id=1 and tested it and the same error occured.,因为运行时永远不会到达那个点,因为操作被传递给'[HttpPost] Create'并且它永远不会回到原始页面。

您的代码还存在其他问题,因为您在代码中使用的名称与您在说明中提到的名称不同...

一个简单的解决方案是:

1-在你[HttpPost]创建动作结束时使用以下return

return RedirectToAction("Action2", "Area/Controller2", new { id = model.Id});

2-替换初始页面中的以下代码

if (ViewBag.Created ==0) {
             @Html.Partial("CreateView1",Model);
    }
else
{
    { Html.Action("Action2", "Area/Controller2", new { id = Model.Id }); }
}

以下内容:

@Html.Partial("CreateView1",Model);

并删除您设置ViewBag.Created = 0ViewBag.Created =1

的任意位置

我还假设控制器action2中的操作Controller2会返回有效的部分视图。

希望这有助于您了解修复代码。

答案 1 :(得分:0)

为简洁起见,您可能省略了这一点,但您希望在发布操作结束时返回viewresult:

return View(new MyModel());

答案 2 :(得分:0)

试试这个:

 if (ViewBag.Created ==0) {
         @Html.RenderPartial("CreateView1",Model);
    }