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

本文关键字:站点 文件 Razor 函数 布局 ASP NET 访问 | 更新日期: 2023-09-27 18:28:15

我在_SiteLayout.cshtml文件的开头有几个Razor函数,我认为使用它进行布局的页面可以访问这些函数。然而,它似乎不起作用。。。其他页面有没有办法利用它们?

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

 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);
            }
        }

类似于:

    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, someVariableHere)之类的东西来称呼它?

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

尝试将它们放在自己的静态类中,作为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页面上,你这样使用它:

@Html.Label("firstName", "First Name:")

这个例子来自MSDN上的这个链接。

更新

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