将常见的剃须刀助手移动到另一个文件

biz*_*dee 11 c# razor asp.net-mvc-4

我有一个MVC4网络应用程序,我目前有几个@helper我在多个页面上使用,在cshtml中定义.问题是,我必须在他们使用的每个页面上定义它们.是否可以创建一个.cshtml包含我所有文件的文件@helper并将该页面包含在我的视图中?

即,这用于cms区域中的每个Index视图.

@helper DisplayPager(Int32 CurrentPage, Int32 MaxPages) {
    String IsActive = "";
    <div class="pagination pagination-centered">
        <ul>
            <li><a href="@Url.Action("Index", new { id = CurrentPage - 1 > 0 ? CurrentPage - 1 : 1 })">Prev</a></li>
            @for (int i = 0; i < MaxPages; i++)
            {
                IsActive = ((i + 1) == CurrentPage) ? "active" : "";

                <li class="@(IsActive)"><a href="@Url.Action("Index", new { id = i + 1 })">@(i + 1)</a></li>       
            }
            <li><a href="@Url.Action("Index", new { id = CurrentPage + 1 < MaxPages ? CurrentPage + 1 : MaxPages })">Next</a></li>
        </ul>
    </div>
}
Run Code Online (Sandbox Code Playgroud)

相同的定义,相同的代码,相同的一切,但它现在在代码中至少15次.

Vas*_*nth 13

以下是实现这一目标的说明

此过程向您展示如何创建创建注释的帮助程序,如上所述.这是一个简单的示例,但自定义帮助程序可以包含您需要的任何标记和ASP.NET代码.

  1. 在网站的根文件夹中,创建名为App_Code的文件夹.这是ASP.NET中的保留文件夹名称,您可以在其中放置帮助程序等组件的代码.

  2. 在App_Code文件夹中,创建一个新的.cshtml文件,并将其命名为MyHelpers.cshtml.

  3. 用以下内容替换现有内容:

    @helper MakeNote(string content) 
    {
      <div class="note" 
           style="border: 1px solid black; width: 90%; padding: 5px; margin-left: 15px;">
        <p>
          <strong>Note</strong>&nbsp;&nbsp; @content
        </p>
      </div>
    }
    
    Run Code Online (Sandbox Code Playgroud)

    该代码使用@helper语法来声明一个名为MakeNote的新助手.此特定帮助程序允许您传递名为content的参数,该参数可以包含文本和标记的组合.助手使用@content变量将字符串插入到音符主体中.

    请注意,该文件名为MyHelpers.cshtml,但帮助程序名为MakeNote.您可以将多个自定义帮助程序放入单个文件中.

  4. 保存并关闭文件.

从这篇文章中复制了它

  • 这样做,似乎是标准的方法,但它是如此可怕的黑客.为什么微软决定将App_Code放在我之外的地方放置共享助手.视图应位于视图文件夹中.这完全违反直觉. (9认同)