首页 文章

在ASP.NET MVC中显示另一个控制器的视图

提问于
浏览
220

是否可以显示另一个控制器的视图?

比方说,我有 CategoriesControllerCategory/NotFound.aspx 视图 . 在 CategoriesController 中,我可以轻松返回 View("NotFound") .

现在说我有 ProductsController 以及添加产品的操作和视图 . 但是,此操作要求我们有一个类别来添加产品 . 例如, Products/Add/?catid=10 .

如果我无法根据 catid 找到类别,我想从Categories控制器显示 NotFound 视图,而不是在Products控制器下创建 CategoryNotFound 视图 .

这是可能的还是我以错误的方式构建事物?有没有一个很好的方法来做到这一点?

7 回答

  • 39

    是 . 默认情况下,ASP.NET MVC首先在 \Views\[Controller_Dir]\ 中检查,但在此之后,如果找不到视图,则会检入 \Views\Shared .

    共享目录专门用于跨多个控制器共享视图 . 只需将您的View添加到Shared子目录,就可以了 .

    如果您这样做 return View("~/Views/Wherever/SomeDir/MyView.aspx") 您可以返回任何您想要的视图 .

  • 33

    您可以使用:

    return View("../Category/NotFound", model);
    

    它在ASP.NET MVC 3中进行了测试,但也应该在ASP.NET MVC 2中运行 .

  • -1

    是的可能 . 像这样返回 RedirectToAction() 方法:

    return RedirectToAction("ActionOrViewName", "ControllerName");
    
  • 152

    你试过 RedirectToAction 吗?

  • 5

    是的你可以 . 返回一个这样的动作:

    return RedirectToAction("View", "Name of Controller");
    

    一个例子:

    RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees");
    

    这种方法将调用GET方法

    您还可以将值传递给操作,如下所示:

    RedirectToAction("Details/" + id.ToString(), "FullTimeEmployees", new {id = id.ToString(), viewtype = "extended" );
    
  • 243

    您也可以从JavaScript / jQuery调用任何控制器 . 假设您有一个控制器返回404或其他一些用户控件/页面 . 然后,在某些操作中,从您的客户端代码中,您可以调用一些地址来激活您的控制器并以HTML格式返回结果,您的客户端代码可以获取此返回的结果并将其放在您想要的页面中...

  • 14

    使用此代码,您可以获得任何控制器:

    var controller = DependencyResolver.Current.GetService<ControllerB>();
    controller.ControllerContext = new ControllerContext(this.Request.RequestContext, 
    controller);
    

相关问题