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

时间:2014-10-28 21:25:35

标签: c# asp.net razor

我在_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)这样称呼它?

1 个答案:

答案 0 :(得分:0)

尝试将它们放在自己的静态类中,作为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:")

该示例来自this link at MSDN

<强>更新

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