在ASP.NET Core MVC Action中判断某个视图是否存在

在开发Web网站过程中可能会遇到需要添加许多宣传页,这些宣传页往往不需要什么后端逻辑代码,这时候我们就不希望为每一个宣传页都添加一个Action,

而是希望只添加一个Action,然后结合路由动态的指向不同的视图。而动态的指向不同的视图这时候可能就需要用到判断某个视图是否存在,不存在执行某个逻辑。

下面我们来看下Demo:

首先来看下Demo的项目结构

接下来看下核心代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.ViewEngines;

namespace IsExistsViewDemo.Controllers
{
    /// <summary>
    /// 静态宣传页
    /// </summary>
    public class DHtmlController : Controller
    {
        #region 字段和属性

        /// <summary>
        /// 混合视图引擎
        /// </summary>
        private readonly ICompositeViewEngine _compositeViewEngine;

        #endregion 字段和属性

        #region 构造函数

        /// <summary>
        /// 构造函数
        /// </summary>
        public DHtmlController(ICompositeViewEngine compositeViewEngine)
        {
            _compositeViewEngine = compositeViewEngine;
        }

        #endregion 构造函数

        #region 宣传页

        /// <summary>
        /// 宣传页
        /// </summary>
        /// <param name="viewname">
        /// 视图名称
        /// </param>
        /// <returns>
        /// </returns>
        [Route("dhtml/{viewname}/")]
        public IActionResult Index(string viewname)
        {
            var view = _compositeViewEngine.FindView(ControllerContext, viewname, false)?.View;
            if (view == null) //判断指定的视图文件是否存在
            {
                // TODO
                return View("NotFound");
            }

            return View(viewname);
        }

        #endregion 宣传页

        #region 直通车宣传页

        /// <summary>
        /// 直通车宣传页
        /// </summary>
        /// <param name="viewname">
        /// 视图名称
        /// </param>
        /// <returns>
        /// </returns>
        [Route("dhtml/ztc/{viewname}.html")]
        public IActionResult ZTC(string viewname)
        {
            var view = _compositeViewEngine.FindView(ControllerContext, $"ZTC/{viewname}", false)?.View;
            if (view == null) //判断指定的视图文件是否存在
            {
                // TODO
                return View("NotFound");
            }

            return View($"ZTC/{viewname}");
        }

        #endregion 直通车宣传页
    }
}

 

Demo源码:

链接:https://pan.baidu.com/s/1qZvzH3sWGLh0XHzYfsd3CQ 
提取码:72p1

转载请保留此原文链接https://www.cnblogs.com/xyh9039/p/13049734.html

版权声明:如有雷同纯属巧合,如有侵权请及时联系本人修改,谢谢!!!

posted @ 2020-06-05 15:17  谢友海  阅读(1159)  评论(0编辑  收藏  举报