asp.net-core-mvc - 如何将 'jump' 从 MVC ViewComponent 转移到另一个 Controller ?

标签 asp.net-core-mvc

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

这是我的代码:

   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);

    }

如果它是一个 Controller ,我可以返回 RedirectToAction 但这在这里不可用。

我认为主要问题是我需要要么出去要么归还一个Caritems,但我找不到同时做到这两点的方法。

在过去的好日子里,response.redirect("Empty.aspx") 很简单,但现在 MVC 中的一切都变得“更容易”,需要几天的研究才能完成最简单的事情.

最佳答案

View 组件听起来不像是执行此重定向的理想选择。 View 组件非常适合渲染某些部分 View 。例如,使用 View 组件呈现购物车商品数量或内容是一个好主意。

就您而言,您希望在购物车为空时重定向到另一个操作方法。您可以创建一个操作过滤器来执行此操作。您可以根据需要将其应用在操作方法级别或 Controller 级别。

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);
    }
}

您可以将其应用到 Controller 级别

[CheckCartValues]
public class HomeController : Controller
{
}

确保 ShopController 上没有它,否则您将获得无限重定向。如果需要,您还可以更新操作过滤器代码,以便在当前请求针对 ShopController 时不执行重定向。我会把它留给你:)

关于asp.net-core-mvc - 如何将 'jump' 从 MVC ViewComponent 转移到另一个 Controller ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46922593/

相关文章:

reactjs - 在 ASP.NET Core 应用程序中配置 React Dev Server

Angular 9 和 .NET Core - 从源 localhost :4200 has been blocked by CORS policy 访问

c# - 将 IHttpContextAccessor 注入(inject) ApplicationDbContext ASP.NET Core 1.0

asp.net-core - 带有 IOptionsSnapshot 的 ASP.NET Core 配置 reloadOnChange 仍然没有响应

asp.net-core - 什么是 ASP.NET Core 静态 Web Assets ?

debugging - 默认的 ASP.NET Core MVC 项目不会运行

c# - 将 Blazor 支持添加到现有的 ASP .NET Core 2.1 MVC 应用程序

asp.net-mvc - MVC : AmbiguousActionException: Multiple actions matched

asp.net - 谁应该负责对 Controller /域邮件服务/存储库进行分页?

c# - Visual Studio 2015 中的 ASP.NET Core MVC 2.0