Asp.net core mvc 你如何';跳转';从MVC ViewComponent到另一个控制器?

Asp.net core mvc 你如何';跳转';从MVC ViewComponent到另一个控制器?,asp.net-core-mvc,Asp.net Core Mvc,我有一个简单的场景,如果购物车是空的,我想重定向到另一个“页面”(控制器),其中说明购物车是空的,或者只是将它们发送回商店 这是我的密码: public async Task<IViewComponentResult> InvokeAsync() { CartFunctions cartf = new CartFunctions(_logger, AppSettings, _httpContextAccessor); Cart c = n

我有一个简单的场景,如果购物车是空的,我想重定向到另一个“页面”(控制器),其中说明购物车是空的,或者只是将它们发送回商店

这是我的密码:

   public async Task<IViewComponentResult> InvokeAsync()
    {
        CartFunctions cartf = new CartFunctions(_logger, AppSettings, _httpContextAccessor);
        Cart c = new Cart();
        c = cartf.GetShopingCart();

        if (c.CartItems == null)
        {
          // How do  I get out of  here to  a differnet Controller     
        }


       return View(c.CartItems);

    }
public异步任务InvokeAsync()
{
CartFunctions cartf=新的CartFunctions(_logger,AppSettings,_httpContextAccessor);
购物车c=新购物车();
c=cartf.GetShopingCart();
如果(c.CartItems==null)
{
//我怎么离开这里到另一个网络控制器
}
返回视图(c.CartItems);
}
如果是控制器,我可以
返回重定向到操作
但这里没有

我想主要的问题是我要么出去,要么还车,但我找不到一种方法来同时做这两件事


在好的ole时代,response.redirect(“Empty.aspx”)很简单,但现在MVC中的一切都“更简单”,做最简单的事情需要几天的研究。

一个视图组件听起来不像是做这个重定向的理想选择。视图组件非常适合渲染某些局部视图。例如,使用视图组件呈现购物车项目计数或内容是一个好主意

在您的情况下,您希望在购物车为空时重定向到另一个操作方法。您可以创建一个操作筛选器来完成此操作。您可以根据需要在操作方法级别或控制器级别应用它

public class CheckCartValues : ActionFilterAttribute
{       
    public override void OnActionExecuting(ActionExecutingContext context)
    {            
        if (yourIfConditionToCheckCartIsEmpty)
        {
            context.Result =
                new RedirectToRouteResult(new RouteValueDictionary(new { 
                                               controller = "Shop", action = "index" }));
        }
        base.OnActionExecuting(context);
    }
}
您可以在控制器级别应用它

[CheckCartValues]
public class HomeController : Controller
{
}

确保您的
ShopController上没有它,否则您将得到无限的重定向。如果需要,当当前请求是针对
ShopController
时,您还可以更新操作筛选器代码以不执行重定向。我将由您决定:)

如果您想使用可以从ActionMethodSelectorAttribute派生的属性


例如,您可以创建一个名为CartStatus(bool isEmpty)的属性,并将该属性应用于需要根据购物车状态采取不同行为的方法。然后,您的条件逻辑正好位于一个位置(该属性),您可以在整个应用程序中重用它。与@shyju的方法类似,但不是重定向,而是从该方法返回true/false以执行适当的操作。

在何处/如何调用视图组件?您希望在哪个事件上重定向到特定页面?它是从包含页面调用的,例如@await Component.InvokeAsync(“Basket”)