在标准的MVC应用程序中,我们有 _Layout.cshtml 和 Index.cshtml 视图。现在想象一下,如果用户在注册后收到电子邮件激活,现在他/她点击该链接。
链接指向/ Account / ActivateAccount,在我处理激活后,我想将用户重定向到显示消息的Login.cshtml局部视图。
我知道我可以通过TempData [“Message”]传递消息,但我不知道如何重定向到局部视图并在 _Layout.cshtml 而不是自己。
至少这是当我打电话给 RedirectToAction(“登录”,“主页”)时发生的事情
注意:所有基于“家”的部分视图都显示在< div id =“divmain”>我理想的解决方案是能够决定哪个视图应该在div中显示,来自控制器。
从另一个控制器中调用部分视图以显示的正确方法是什么?
答案 0 :(得分:1)
我不完全确定我理解这个问题,但我认为你问的是你是否可以从_layout调用部分视图?这可以使用@Html.Action()
帮助程序完成。它将调用您指定的控制器和方法并插入结果。您调用的方法只是一个PartialResult,它返回部分视图以及您需要的任何数据。
这与@Html.Partial()
形成对比,@Html.Partial()
将使用您提供的任何数据呈现部分视图,而无需通过控制器进行路由。
编辑:
总结对这个答案的评论,似乎我误解了这个要求。用户收到电子邮件并单击该链接以激活其注册。处理该请求的控制器操作会激活用户,然后需要重定向到某个位置。在这种情况下,已经有一个部分视图可以达到目的,但由于某些原因无法直接重定向。我的建议是创建一个包含return RedirectToAction()
调用的新视图,基本上将部分包装在完整视图页面中。
处理点击的操作方法可以直接返回该视图,或者如果您认为链接的点击是“帖子”,因为它通过验证用户来更改应用程序模型,您将创建一个新的控制器行动和{{1}}直接。这就像遵循Post,Redirect,Get方法一样,如果用户尝试刷新“激活”页面,则可以防止出现问题。它还可以更好地控制URL命名。