我有一个简单的场景,如果购物车是空的,我想重定向到另一个“页面”( 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/