ASP.NET MVC如何基于条件从控制器返回不同的首页视图
ASP.NET MVC 同Action返回多视图实现方案
ASP.NET MVC 控制器完全支持在同一个Action方法中返回不同的视图,可按照以下步骤实现你的需求:
1. 确认视图存放位置
将AppNotAvailable.cshtml存放到以下任意一个目录,MVC框架会按照优先级自动匹配查找视图:
- 优先级1:
/Views/Customers/目录(和当前CustomersController对应的专属视图目录) - 优先级2:
/Views/Shared/目录(全局公共视图目录,适合放全站通用的提示页)
2. 补充else分支返回逻辑
直接调用View()重载方法,传入指定的视图名称即可,修改后的代码如下:
public async Task<IActionResult> Index(string sortOrder, string searchString, int? pageNumber, string currentFilter) { ViewData["CustomerParam"] = String.IsNullOrEmpty(sortOrder) ? "customer_desc" : ""; ViewData["LocationParam"] = String.IsNullOrEmpty(sortOrder) ? "location_desc" : ""; ViewData["CurrentFilter"] = searchString; ViewData["CurrentSort"] = sortOrder; if( Criteria == true) { return View(await PaginatedList<Customer>.CreateAsync(cust.AsNoTracking(), pageNumber ?? 1, pageSize)); } else { // 直接传入视图名即可返回对应页面 return View("AppNotAvailable"); } }
扩展说明
- 如果需要给
AppNotAvailable页面传递自定义提示信息,可以通过ViewBag/ViewData传值,也可以传入强类型模型:else { ViewBag.MaintainTip = "系统正在进行版本升级,预计1小时后恢复访问"; return View("AppNotAvailable"); } - 如果你的视图没有放在默认的查找目录下,可以直接写完整的相对路径指定视图位置:
return View("~/Views/CustomPages/AppNotAvailable.cshtml"); - 你现有的路由配置不需要做任何修改,所有首页跳转逻辑都在当前Index方法内处理即可满足需求。
内容的提问来源于stack exchange,提问作者user4912134
相关产品推荐
相关产品推荐

