我试图实现的是使用一个静态类,这样我就可以在所有页面中使用它/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")
现在我可以添加我想要的任意多个案例,并更改该案例的链接。感谢所有的帮助!