【问题标题】:Razor web pages: How do I create variable that is available to all pages?Razor 网页:如何创建可用于所有页面的变量?
【发布时间】:2014-01-20 23:14:33
【问题描述】:

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

我尝试了 _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...    

}

【问题讨论】:

  • 我的第一个问题是为什么...但是您是否考虑将代码放在您的其他控制器继承的基础Controller 中?然后你可以使用ViewBag..
  • How can I create a generic view model in MVC? 的可能副本。您建议解决问题的方式非常反对MVC design。您示例中的逻辑类型不应存在于任何视图中。
  • 这不是 MVC,而是网页。我目前正在关注本教程:w3schools.com/aspnet/webpages_intro.asp
  • 当您说“使用相同的变量”时,您是使用相同的变量名还是在许多页面中返回相同的数据?

标签: c# razor webmatrix


【解决方案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...
}

可能会有更优雅、更高效的方法来实现这一点,但它们取决于您具体在做什么。出于遵循教程的目的,这应该符合您的目的。

【讨论】:

    【解决方案2】:

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

    在您的控制器中覆盖 OnActionExecuting(在构造函数中,Session 不可用)

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

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

    【讨论】:

    • 这不是 MVC 问题。
    猜你喜欢
    • 2018-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-03
    • 1970-01-01
    • 2021-12-25
    • 2016-06-09
    • 1970-01-01
    相关资源
    最近更新 更多