【问题标题】:Using a Razor @functions in several webpages (.cshtml files)在多个网页(.cshtml 文件)中使用 Razor @functions
【发布时间】:2013-07-10 06:19:54
【问题描述】:

我有以下功能,我希望我的 asp.net 网页 2 应用程序中的多个 .cshtml 视图都可以使用它。如何使此功能可用于应用程序中的任何视图(而不仅仅是一个)。

@functions {

    public bool DisplayButton(String startDate, String endDate)
    {
        return Convert.ToDateTime(startDate) < DateTime.Now && Convert.ToDateTime(endDate) > DateTime.Now;
    }
}

【问题讨论】:

标签: asp.net razor asp.net-webpages


【解决方案1】:

在 App_Code 中创建一个名为 Functions.cshtml 的文件,然后将您拥有的代码粘贴到该文件中。然后,您可以在任何 .cshtml 文件中调用 DisplayButton 方法,方法是在文件名前加上前缀:

var myBool = Functions.DisplayButton(DateTime.Now, DateTime.Now.AddDays(30));

有关在 ASP.NET 网页中使用函数和助手的更多信息,请阅读:http://www.mikesdotnetting.com/Article/173/The-Difference-Between-@Helpers-and-@Functions-In-WebMatrix

【讨论】:

  • 这正是我所需要的。谢谢。
  • 我收到了这个错误信息。 CS0120:非静态字段、方法或属性“Functions.AgoDateString()”需要对象引用
  • 这行得通。正如链接文章所说,文件 Functions.cshtml 可以被称为任何东西,但声明的方法必须是公共静态的,并且通过引用文件名 @Functions.MyMethod() 来调用它们。如果方法不是公共静态的,您将收到与 Georgi 类似的错误。另请注意,MSVC 会为您自动生成所需的类。
【解决方案2】:

不明白为什么不能有一个带有静态方法的静态类,而只是将它包含在每个视图的顶部然后使用它

【讨论】:

  • 因为每次修改类都需要编译
【解决方案3】:

您可以在 AppCode 目录中的 Razor 文件中定义“全局”帮助函数,如下所述:http://weblogs.asp.net/scottgu/archive/2011/05/12/asp-net-mvc-3-and-the-helper-syntax-within-razor.aspx。但是,助手只渲染页面元素;它们不能返回值(或者更准确地说,返回的值是要呈现的 HTML 标记)。

如果你需要返回一个值,你最好的选择是扩展方法。

【讨论】:

  • functions 关键字用于定义返回方法签名定义的值的函数(方法)。 helper 关键字定义了一个呈现 HTML 的 Razor 模板。
猜你喜欢
  • 2017-03-18
  • 2021-05-19
  • 2020-03-02
  • 2020-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-12
相关资源
最近更新 更多