【问题标题】:Call another controller and use a different Layout for the called controller action MVC ASP.NET调用另一个控制器并为调用的控制器操作 MVC ASP.NET 使用不同的布局
【发布时间】:2014-11-10 10:01:49
【问题描述】:

我是 MVC ASP.Net 的新手。我想从另一个控制器调用一个操作方法并使用不同的布局页面。

我的 Views/Shared 文件夹有两个布局页面:~/Views/Shared/_Layout1.cshtml 和 ~/Views/Shared/_Layout2.cshtml。以下是我的代码:

//HomeController
public class HomeController : Controller
{
    public ActionResult Index(string id)
    {
        if(String.IsNullOrEmpty(id))
        {
          //Call someMethod from UserController
          //And when called, it should a different Layout page: ~/Views/Shared/_Layout2.cshtml
          return View("someMethod"); 
        }
        else
        {
          return AboutPage(id); //uses ~/Views/Shared/_Layout1.cshtml
        }
     }
    public ActionResult AboutPage(string id)
    {
       return View();
    }

 }

【问题讨论】:

    标签: c# asp.net asp.net-mvc razor


    【解决方案1】:

    如果你想使用不同的布局,那么你可以使用View方法的重载版本:

    return View("view", "_Layout1"); 
    

    如果您想将控制流重定向到不同的控制器/动作,那么:

    return RedirectToAction("action", "controller");
    

    【讨论】:

    • 对于第一种情况,我必须为“view”和“_Layout1”指定路径吗?由于某种原因,当我运行程序时它找不到布局页面。谢谢
    • "_Layout2" 应该可以正常工作,但是您可以尝试使用"~/Views/Shared/_Layout2.cshtml" 而不是"_Layout1"。检查已用于查找主名称(布局)的路径的异常。
    • 太棒了!它在“~/Views/Shared/_Layout2.cshtml”时工作。谢谢@walkhard :)
    • 如果您不介意,还有一个问题。对于第二种情况:是否可以重定向控制流并使用“_Layout2.cshtml”而不是使用常规“_Layout1.cshtml”?
    • 您必须在另一个操作中执行此操作,即返回View
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 2013-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多