如何在静态方法中获取上下文



我试图实现的是使用一个静态类,这样我就可以在所有页面中使用它/chml。我有一张表,可以保存SiteName等信息。

这个用法看起来是这样的:

@EnvTitles.GetPageInfo("sitename");

在静态类中,我需要从数据库表中生成它。这是我所拥有的:

public class EnvTitles
{
private readonly GeneralEntities db = new GeneralEntities();
public static string GetPageInfo(string info)
{
string ReturnVal = string.Empty;

switch (info)
{
case "sitename":
var site = db.SiteDescriptions.Where(x => x.Title == "Site Name").Single();
ReturnVal = site.Text;
break;
default:
ReturnVal = "";
break;
}
return ReturnVal;
}
}

问题是它不像CCD_ 2-";非静态字段、方法或属性"EnvTitles.db"需要对象引用;

在搜索过程中,我找到了答案。在公共静态字符串中包括中的Context。像这样:

public static string GetPageInfo(string info, GeneralEntities context)
{
string ReturnVal = string.Empty;

switch (info)
{
case "sitename":
var site = context.SiteDescriptions.Where(x => x.Title == "Site Name").Single();
ReturnVal = site.Text;
break;
default:
ReturnVal = "";
break;
}
return ReturnVal;
}

这是有效的,然而,现在我在页面上对此的引用在那个地方期待着一些东西。

@EnvTitles.GetPageInfo("sitename", "Something Here!");

所以这里没有什么可放的。我试着把null放在那里,但当我运行项目时,它返回时上下文返回null。

有办法这样做吗?谢谢你的帮助!

最佳实践是将数据库上下文传递到您的方法中,如

public static string GetPageInfo(string info, GeneralEntities db)

然后在调用cshtml中创建CCD_ 5对象,使其具有请求的范围。然后,您的呼叫在cshtml 中会显示如下内容

@{
var db = new GeneralEntities();
}
@EnvTitles.GetPageInfo("sitename", db);

还有很多其他方法可以实现你想要做的事情,但这是最直接、最不固执己见的方法。

我通过这样做做到了这一点:

public static string GetPageInfo(string info)
{
string ReturnVal = string.Empty;
var context = new GeneralEntities();
switch (info)
{
case "sitename":
var site = context.SiteDescriptions.Where(x => x.Title == "Site Name").Single();
ReturnVal = site.Text;
break;
default:
ReturnVal = "";
break;
}
return ReturnVal;
}

页面上的链接保持不变:

@EnvTitles.GetPageInfo("sitename")

现在我可以添加我想要的任意多个案例,并更改该案例的链接。感谢所有的帮助!

最新更新