我有以下场景,我在视图(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>());
}
答案 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 = 0
或ViewBag.Created =1
我还假设控制器action2
中的操作Controller2
会返回有效的部分视图。
希望这有助于您了解修复代码。
答案 1 :(得分:0)
为简洁起见,您可能省略了这一点,但您希望在发布操作结束时返回viewresult:
return View(new MyModel());
答案 2 :(得分:0)
试试这个:
if (ViewBag.Created ==0) {
@Html.RenderPartial("CreateView1",Model);
}