从ViewComponent调用控制器

时间:2016-11-23 14:43:09

标签: c# asp.net-core asp.net-core-viewcomponent

您知道我是否可以从asp.net核心中的ViewComponent调用控制器? 我正在尝试这样的事情

public MyViewComponent : ViewComponent
{
    public IViewComponentResult Invoke()
    {
         return (IViewComponentResult) new RedirectToActionResult
                        ("actionName", "controllerName", null);
    }

}

但我显然得到了InvalidCastException。

1 个答案:

答案 0 :(得分:0)

  

您知道我是否可以从asp.net核心中的ViewComponent调用控制器?我正在尝试这样的事情return (IViewComponentResult) new RedirectToActionResult("actionName", "controllerName", null);

做你想做的事是没有意义的。

控制器处理HTTP请求; ViewComponent不处理HTTP请求(see this section)。事实上,你更有可能从一个从ViewComponent调用Controller的Controller调用一个ViewComponent。

您尝试使用的RedirectToActionResult会尝试将现有HTTP请求从网址重定向到其他网址。由于ViewComponent不处理HTTP请求,因此无需重定向,RedirectToActionResult不合适。

如果确实想要从ViewComponent调用Controller,那么您有两个选择:

  1. 在ViewComponent中,创建Controller的实例并直接调用其中一个Actions。这将有点奇怪,因为您必须手动管理控制器上下文和依赖项。

  2. 在ViewComponent中,获取HttpClient的实例,并使用它来向Controller Action发出HTTP请求。