剃刀网页:如何创建变量,提供给所有的网页?(Razor web pages: How do I cr

2019-10-19 05:35发布

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

我想这两个_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...    

}

Answer 1:

对于一个相当直接的解决方案,您可以创建中的静态类/方法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...
}

有可能会更优雅,高性能的方式来实现这一点,但他们依靠正是你在做什么。 对于下面的教程这应该成为你的目的的目的。



Answer 2:

你可以得到使用的会话,并尝试使用一个控制器。

看到

  • 添加控制器
  • 添加视图
  • 添加模式

覆盖OnActionExecuting控制器内(wihtin构造会话不可用)

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

这是一个字符串一个简单的解决方案。 您可以创建强类型的意见,并得到一个非常comfotable办法的意见中处理这些数据。



文章来源: Razor web pages: How do I create variable that is available to all pages?