利用Razor引擎生成静态页(ASP.NET MVC)实例详解


本文摘自PHP中文网,作者Y2J,侵删。

最近在研究ASP.NET MVC生成静态页,那么今天也算个学习笔记吧!

实现原理及步骤:

1.通过ViewEngines.Engines.FindView查找到对应的视图,如果是部分视图,则用:ViewEngines.Engines.FindPartialView;

2.设置上下文对象里的Model;

3.调用视图的Render()方法,将渲染结果保存到物理静态文件;

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

using System;

using System.IO;

using System.Text;

using System.Web.Mvc;

  

namespace Whir.Foundation.UI

{

  /// <summary>

  ///   描述:静态页面生成帮助类

  /// </summary>

  public class StaticPageHelper

  {

    /// <summary>

    ///   根据View视图生成静态页面

    /// </summary>

    /// <param name="htmlPath">存放静态页面所在绝对路径</param>

    /// <param name="context">ControllerContext</param>

    /// <param name="viewPath">视图名称</param>

    /// <param name="masterName">模板视图名称</param>

    /// <param name="model">参数实体模型</param>

    /// <param name="html">返回信息</param>

    /// <param name="isPartial">是否分布视图</param>

    /// <returns>生成成功返回true,失败false</returns>

    public static AjaxResult GenerateStaticPage(string viewPath,

                          string htmlPath,

                          ControllerContext context, object model = null, bool isPartial = false,

                          string masterName = "")

    {

      var ajaxResult = new AjaxResult();

      try

      {

        //创建存放静态页面目录              

        if (!Directory.Exists(Path.GetDirectoryName(htmlPath)))

        {

          Directory.CreateDirectory(Path.GetDirectoryName(htmlPath));

        }

        //删除已有的静态页面

        if (File.Exists(htmlPath))

        {

          File.Delete(htmlPath);

        }

        ViewEngineResult result = null;

        if (isPartial)

        {

          result = ViewEngines.Engines.FindPartialView(context, viewPath);

        }

        else

        {

          result = ViewEngines.Engines.FindView(context, viewPath, masterName);

        }

  

        if (model != null)

        {

          context.Controller.ViewData.Model = model;

        }

  

        /*

         * 设置临时数据字典作为静态化标识

         * 可以在视图上使用TempData["IsStatic"]来控制某些元素显示。

         */

        if (!context.Controller.TempData.ContainsKey("IsStatic"))

        {

          context.Controller.TempData.Add("IsStatic", true);

        }

  

        if (result.View != null)

        {

          using (var sw = new StringWriter())

          {

            var viewContext = new ViewContext(context,

                             result.View,

                             context.Controller.ViewData,

                             context.Controller.TempData, sw);

  

            result.View.Render(viewContext, sw);

  

            string body = sw.ToString();

            File.WriteAllText(htmlPath, body, Encoding.UTF8);

            ajaxResult.IsSucess = true;

            ajaxResult.Body = "存放路径:" + htmlPath;

          }

        }

        else

        {

          ajaxResult.IsSucess = false;

          ajaxResult.Body = "生成静态页面失败!未找到视图!";

        }

      }

      catch (IOException ex)

      {

        ajaxResult.IsSucess = false;

        ajaxResult.Body = ex.Message;

      }

      catch (Exception ex)

      {

        ajaxResult.IsSucess = false;

        ajaxResult.Body = ex.Message;

      }

      return ajaxResult;

    }

  }

}

AjaxResult 是自己封装的一个类,您也可以用自己封装的类代替。

1

2

3

4

5

public class AjaxResult

{

  public bool IsSucess { get; set; }

  public string Body { get; set; }

}

以上就是利用Razor引擎生成静态页(ASP.NET MVC)实例详解的详细内容!

相关阅读 >>

asp.net core异常和错误处理(8)_实用技巧

分享asp.net内置对象之response对象教程

asp.net mvc中signalr用法讲解

asp.net实现群发邮件功能实例教程

asp.net mvc 使用bootstrap方法介绍

.net项目中上传大图片失败

在asp.net中所有的自定义用户控件都必须继承什么?

asp.net 传值总结

iis如何实现部署asp.net mvc网站的方法

asp.net中的参数与特殊类型的实例详解

更多相关阅读请进入《Razor》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...