Razor中嵌套声明式@helpers的性能考虑因素

时间:2017-02-01 17:41:53

标签: asp.net asp.net-mvc performance razor asp.net-mvc-5

@helpers以及部分视图允许很好的可组合性,但是我想知道是否需要注意显着的性能成本。例如:

App_Code文件\ Wrappers.cshtml:

@helper HeaderWrapper(WebViewPage view, Func<object, HelperResult> content,Func<object, HelperResult> navbar = null) {
  <div class="container-fluid">
   @content(null)
  </div>

if (navbar != null) {
    <div class="container-fluid">
      <nav id="navbar-page" class="navbar-default navbar-collapse collapse" role="navigation">
        <ul class="nav navbar-nav nav-pills">
          @navbar(null)
        </ul>
      </nav>
    </div>
}
}

App_Code文件\ Helpers.cshtml:

@* Logo based on Font Awesome icon *@
@helper PageHeaderLogo(FA icon) { 
  @PageHeaderLogo2(@<text>
        <i class="fa fa-@icon"></i>
    </text>)
}

@helper PageHeaderLogo2(Func<object, HelperResult> content) { 
    <div class="bm-logo">
      @content(null)
    </div>
}

视图\主页\ index.cshtml:

@section SECTION_HEADER{
  @Wrappers.HeaderWrapper(this,
  @<text>
    <div>static html</div>
    @Helpers.PageHeaderLogo(FA.star) 
  </text>,
  @<text>
    <div>my navbar</div>
  </text>)
}

在此示例中,如果您查看实际视图,则组合如下: 1. @Helpers.PageHeaderLogo被召唤 2. @Helpers.PageHeaderLogo来电@Helpers.PageHeaderLogo2 3.当@Helpers.PageHeaderLogo返回时,会调用@Wrappers.HeaderWrapper。 4.当@Wrappers.HeaderWrapper返回时,整个section SECTION_HEADER将呈现为布局。

这只是一个相对简单的例子,没有部分观点。

所以我的问题是:

  1. 这是一个很好的方法来编写&#34;功能&#34; (助手)和留下干?
  2. 不会对性能产生负面影响(我来自webforms,你不能在那里做那些事情,但我想知道与web表格相比,它是否会减慢html生成几次(我从未使用过viewstate)顺便说一下webforms))?
  3. 可以接受html / razor html的助手显然必须具有Func<object, HelperResult> content类型的参数,然后在调用时可以使用@content(null)进行渲染,如上所示。这是正确的做法,还是我做错了什么?我的意思是null作为参数传递到&#34;内容&#34;这本身只是@helper的一个参数 - 这看起来很奇怪。你会期望它类似于常规字符串。
  4. 感谢。

0 个答案:

没有答案