zoukankan      html  css  js  c++  java
  • 使用asp.net mvc部分视图渲染html

      为了提升用户体验,一般我们采用ajax加载数据然后根据数据渲染html,渲染html可以使用前端渲染和服务器端渲染。

    前端渲染

       使用前端模版引擎或MVC框架,例如underscore.js的template或者是使用angular.js等框架,当然也可以不用任何框架自己拼接html。

    <!DOCTYPE html>
    <html>
        <head>
            <title>underscore.js的template渲染html</title>
        </head>
    <body>
    
    <div id="content"></div>
    
    <script src="~/static/js/lib/jquery-3.1.1.js"></script>
    <script src="http://www.css88.com/doc/underscore/underscore.js"></script>
    
    <script>
        var data = { name: 'john', age: "18" }
        var compiled = _.template("<p>姓名: <%= name %></p><p>年龄: <%= age %></p>");
        $("#content").append(compiled(data));
    </script>
    </body>
    
    </html>

    后端渲染

      如果是使用的asp.net mvc可以使用部分视图,由ajax直接加载服务器端渲染后的部分视图,这部分的全部代码请访问我的github

      public ActionResult News()
       {
           return View();
       }
    
      public ActionResult RenderNews(int pageIndex = 1, int pageSize = 10)
      {
          return PartialView();
      }

     前端直接发ajax请求RenderNews

    $.ajax({
      url: '/Home/RenderNews?pageIndex=3&pageSize=10',
      type: "POST",
      beforeSend: function() {
    
      },
      complete: function() {
    
      },
      success: function(result) {
      if (result.trim() != "") {
          $("#containter").html(result);
      }
      },
      error: function(e) {
         console.log(e);
       }
    });

      使用这种方式是后端直接输出的是渲染后的html,有时候我们需要返回给前端错误码,例如{“code”:10000,"message":"成功","data":"<p>aaaaa</p>"},所以就需要在controller中动态调用分布视图,拿到渲染结果,动态调用代码为:

    public abstract class BaseController : Controller
     {
         /// <summary>
         /// 动态渲染分布视图
         /// </summary>
         /// <param name="viewName">视图名称</param>
         /// <param name="model">模型</param>
         /// <returns>渲染后的html</returns>
         public virtual string RenderPartialViewToString(string viewName, object model)
         {
                if (string.IsNullOrEmpty(viewName))
                    viewName = this.ControllerContext.RouteData.GetRequiredString("action");
    
                this.ViewData.Model = model;
    
                using (var sw = new StringWriter())
                {
                    ViewEngineResult viewResult = System.Web.Mvc.ViewEngines.Engines.FindPartialView(this.ControllerContext, viewName);
                    var viewContext = new ViewContext(this.ControllerContext, viewResult.View, this.ViewData, this.TempData, sw);
                    viewResult.View.Render(viewContext, sw);
    
                    return sw.GetStringBuilder().ToString();
                }
         }
    }

    总结

      由于后端渲染可以使用asp.net mvc 模版引擎语法,所以在可维护性以及开发效率上比前端渲染较好,我个人也倾向使用后端渲染,但由于需要传递给浏览器html,所以带宽占用会较高,这部分损失可以增加服务器带宽解决。

      

        

      

        

        

  • 相关阅读:
    HDU 5842 Lweb and String 【乱搞】
    POJ 2342 Anniversary party 【树形DP】
    [ZJOI2008]树的统计Count 【树链剖分】
    UVA 136 & POJ1338 Ugly Numbers
    ccf 201803-2
    ccf 201809-5
    ccf 201809-4
    ccf 201809-2
    ccf 201809-1
    最小费用可行流
  • 原文地址:https://www.cnblogs.com/zw369/p/6087319.html
Copyright © 2011-2022 走看看