【问题标题】:Move common razor helpers to another file将常见的剃须刀助手移动到另一个文件
【发布时间】:2013-08-06 16:10:52
【问题描述】:

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

即这用于 cms 区域中的每个索引视图。

@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>
}

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

【问题讨论】:

  • 这取决于这些方法的主体是什么,但我建议您只拥有一个包含所有常用功能的静态类文件 (.cs)。您可以将该文件包含在您的 @ 987654327@ 文件,例如@include MyProject.MyHelpers
  • 我已经更新了代码以便更容易回答
  • 可以使用@helper 语法定义可重用的辅助方法,请参阅以下内容:weblogs.asp.net/scottgu/archive/2011/05/12/…

标签: c# asp.net-mvc-4 razor


【解决方案1】:

以下是实现该目标的说明

此过程向您展示了如何创建创建笔记的助手,如前所述。这是一个简单的示例,但自定义帮助程序可以包含您需要的任何标记和 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>
    }
    

    代码使用@helper 语法来声明一个名为 MakeNote 的新助手。这个特殊的帮助器允许您传递一个名为 content 的参数,该参数可以包含文本和标记的组合。助手使用 @content 变量将字符串插入到笔记正文中。

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

  4. 保存并关闭文件。

article复制它

【讨论】:

  • 这行得通,而且似乎是执行此操作的标准方法,但它是如此可怕的 hack。为什么微软决定 App_Code 是让共享帮助者超越我的地方。视图应位于视图文件夹中。这完全违反直觉。
猜你喜欢
  • 1970-01-01
  • 2018-05-19
  • 2016-01-17
  • 1970-01-01
  • 2021-04-05
  • 1970-01-01
  • 2021-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多