C# 在整个ASP.NET站点中访问站点布局文件中的Razor函数

C# 在整个ASP.NET站点中访问站点布局文件中的Razor函数,c#,asp.net,razor,C#,Asp.net,Razor,在我的\u sitellayout.cshtml文件的开头有几个Razor函数,我认为使用它进行布局的页面可以访问这些函数。然而,它似乎不是这样工作的。。。其他页面是否有办法使用它们 编辑: 下面是其中一个函数的示例。如果我像你提到的那样定义函数,我能用它的名字来调用它吗?例如SaveQuestion(3,此处有一些变量) 比如: public static class GlobalFunctions { public void SaveQuestion(int QID, str

在我的
\u sitellayout.cshtml
文件的开头有几个Razor函数,我认为使用它进行布局的页面可以访问这些函数。然而,它似乎不是这样工作的。。。其他页面是否有办法使用它们

编辑: 下面是其中一个函数的示例。如果我像你提到的那样定义函数,我能用它的名字来调用它吗?例如
SaveQuestion(3,此处有一些变量)

比如:

    public static class GlobalFunctions
{
    public void SaveQuestion(int QID, string A)
        {
            if (A != "")
            {

                var db = Database.Open("DB2");

                    var save = "INSERT INTO QuestionnaireData (QuestionID, ID, Answer) VALUES (@0, @1, @2)";
                    db.Execute(save, QID, WebSecurity.CurrentUserId, A);

                }
            }
}

然后类似于
GlobalFunctions.SaveQuestion(3,这里有一些变量)
来调用它?

尝试将它们放在自己的静态类中,作为
HtmlHelper
类的扩展方法实现。像这样:

public static class LabelExtensions
{
    public static string Label(this HtmlHelper helper, string target, 
         string text)
     {
         return String.Format("<label for='{0}'>{1}</label>", target, text);
     }
}
这个例子来自

更新


您不应该在Razor页面中放置SaveQuestion()方法。该功能应该放在控制器类中。Razor页面只生成将发送到浏览器的HTML。浏览器单击一个按钮后,会发生另一个请求,在该请求期间,控制器应根据需要调用SaveQuestion()方法。在这一点上,您可以将该代码放在任何地方,并使用引用放入的任何名称空间的
语句将其包含在
中。

它们可以实现为HtmlHelper类的扩展方法吗?这将允许您使用所有Razor文件都可以访问的Html对象来访问它们。@CharlieKilian可能,我真的不太理解ASP.NET背后的很多内容,我觉得我很容易搞糟一些事情。是否无法创建某种类型的文件供站点的其他部分全局访问?如果它们不涉及HTML(或者即使涉及HTML),您可以在项目中创建一个静态帮助器类,并在页面中键入
@using
,然后使用这些函数。虽然这也适用于HTML,但我不喜欢看到字符串中的HTML标记,因为缺少组织,但它也适用。HtmlHelper扩展方法似乎是最标准的方法。对我来说,这将取决于我们讨论的函数的数量,以及它们有多重。但如果只有少数几个,我会坚持使用HtmlHelper扩展。(如果有几个以上的函数,为什么要用C#而不是CSS中的客户端来实现呢?但我可能误解了你函数的性质。)@CharlieKilian我认为没有太多,20个或更少。他们必须在服务器端运行,因为有些人会调用数据库。我有点困惑。我使用的函数不仅仅是HTML辅助函数。它们根据从数据库检索的信息执行计算。如果我像你上面所说的那样定义它们,我能在其他页面上用它们的名字来称呼它们吗?请参见编辑问题。。。
public static class LabelExtensions
{
    public static string Label(this HtmlHelper helper, string target, 
         string text)
     {
         return String.Format("<label for='{0}'>{1}</label>", target, text);
     }
}
@Html.Label("firstName", "First Name:")