MVC 页面静态化

我们访问直接访问静态页面不仅可以降低数据库的压力,而且也可以降低服务器的压力,静态页面比缓存效果更佳

MVC页面静态化怎么实现:

场景:在一些数据不怎么变动的页面我们可以做页面静态化处理,比如有些页面样式,模板都一样,仅仅是数据不一样。比如房源页面,假如有十套房源,每套房源都有固定的Id编号,为了向用户展示这些房源信息, 一般情况下都是在一个模板页面中写好固定的样式,然后根据不同的房源编号来查询不同的图片,将查询出来的图片放入到模板页面中去的

比如在MVC中是这样处理的:  /Home/Fangyuan/1 ,  /Home/Fangyuan/2 ,  /Home/Fangyuan/3  , /Home/Fangyuan/4  ,  /Home/Fangyuan/5  ....等等


既然是这样,那么我们就可以根据这个规则将编号为1,2,3,4,5的这些房源生成5个HTML页面


下面是演示下做法。就不具体实现了。

Test.cshtml 模板页 (主要供我们读取,生成静态页面的html字符串)

<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Test</title>
</head>
<body>
    <div> 
        @Model
    </div>
</body>
</html>

控制器

using System.IO;
using System.Web.Mvc;

namespace WebApp.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index() //生成静态页
        {
            var model = "Hello";

            //将model数据传递到Test.cshtml模板视图中展示,然后读取这个Test.cshtml模板内容,生成HTML字符串返回
            var viewHtml = RenderViewToString(this.ControllerContext, "~/Views/Home/Test.cshtml", model);

            //将视图html字符串写入到一个Test.html文件中(生成html文件后我们想怎么用就怎么用啦,比如一个<a>标签直接指向这个html文件)
            System.IO.File.WriteAllText(@"C:\Users\Fanbin\Desktop\测试\Solution1\WebApp\"+ "Test.html", viewHtml);

            return Content("OK");
        }

        /// <summary>
        /// 读取视图内容,返回html字符串
        /// </summary>
        /// <param name="context">控制器上下文</param>
        /// <param name="viewPath">视图模板路径</param>
        /// <param name="model">数据模型(将数据填充到视图模板中)</param>
        /// <returns></returns>
        static string RenderViewToString(ControllerContext context, string viewPath, object model = null)
        {
            //使用指定的控制器上下文和母版视图来查找指定的视图
            ViewEngineResult viewEngineResult = ViewEngines.Engines.FindView(context, viewPath, null);
            if (viewEngineResult == null)
            {
                //如果指定视图找不到则抛出异常
                throw new FileNotFoundException("View" + viewPath + "cannot be found.");
            }

            var view = viewEngineResult.View;
            context.Controller.ViewData.Model = model;
            using (var sw = new StringWriter())
            {
                var ctx = new ViewContext(context, view, context.Controller.ViewData, context.Controller.TempData, sw);
                view.Render(ctx, sw);
                return sw.ToString();
            }
        }
    }
}


因为html静态页面是直接生成到网站的根目录下面的,所有我们可以直接调用

http://localhost:7328/Test.html


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值