Razor网页:如何创建可用于所有页面的变量?

时间:2014-01-20 23:14:33

标签: c# razor webmatrix

我有很多页面使用相同的变量。我想在一个页面中创建这些,所以我不必一遍又一遍地输入它们。我该怎么做?

我尝试了_appStart.cshtml和_PageStart.cshtml,但是当我运行我的内容页面时,我收到错误“当前上下文中名称selectedData不存在”

这是我的_PageStart.cshtml :(也试过_appstart.cshtml)

@{
var db = Database.Open("razortest");
var selectQueryString  = "SELECT * FROM tbl_stasjon ORDER BY nr";
var selectedData = db.Query(selectQueryString);
}        

我的所有网页都包含以下内容:

@foreach(var row in (selectedData)) {

html here...    

}

2 个答案:

答案 0 :(得分:2)

对于一个相当直接的解决方案,您可以在App_Code中创建一个静态类/方法,它返回您的查询对象,然后在您需要的地方调用该方法:

using System;
using System.Collections.Generic;
using System.Web;
using WebMatrix.Data;

public static class MyClass
{
    public static IEnumerable<dynamic> GetData()
    {
        var db = Database.Open("razortest");
        var selectQueryString  = "SELECT * FROM tbl_stasjon ORDER BY nr";
        return db.Query(selectQueryString);
    }
}

然后在您的脚本中,您可以:

@foreach(var row in MyClass.GetData()) {
    html here...
}

可能会有更优雅和高效的方法来实现这一目标,但它们取决于你究竟在做什么。为了遵循教程,这应该符合您的目的。

答案 1 :(得分:0)

您可以使用会话并尝试使用控制器。

覆盖控制器中的OnActionExecuting(使用会话不可用的构造函数)

protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
    base.OnActionExecuting(filterContext);
    if (Session != null)
        Session["selectedData"] = "Hello World";
}

并在行动中

Public ActionResult View1(){
     return View(Session["selectedData"];
}

在您的视图中,您可以处理此数据

@{
ViewBag.Title = Model;
}

这是一个带字符串的简单解决方案。您可以创建强类型视图,并获得一种非常灵活的方式来处理视图中的这些数据。