我希望能够从dbContext显示数据库名称。我试图将它作为ViewBag传递但是当我更改页面时它会从页脚中消失。
当我尝试将其作为视图模型传递时,应用程序在我更改页面时崩溃。
private readonly DBContext _context;
public HomeController(DBContext context)
{
_context = context;
}
public IActionResult Index()
{
var dbString = _context.Database.GetDbConnection().Database;
return View(new BaseViewModel { DatabaseName = dbString });
}
我的BaseViewModel类只是一个带有DatabaseName
的字符串属性然后在我的页脚中
@using Project.Models.ViewModels;
@model BaseViewModel;
<footer class="app-footer">
<div class="ml-auto">
<span style="font-weight: bold;">
@Model.DatabaseName
</span>
</div>
</footer>
实现这一目标的最佳方法是什么?我的布局页面中也有@using Project.Models.ViewModels和@model BaseViewModel。
答案 0 :(得分:1)
可以通过多种方式完成: 1.您可以将数据库名称存储在应用程序状态中。在global.asax / startup文件的Application_Start()方法中,您可以调用一个方法在应用程序状态中设置DbName,如下所示:
protected void Application_Start()
{
System.Web.HttpContext.Current.Application.Lock();
System.Web.HttpContext.Current.Application["DbName"] = //call method to set db name;
System.Web.HttpContext.Current.Application.UnLock();
}
它可以在应用程序中的任何地方使用System.Web.HttpContext.Current.Application [&#34; DbName&#34;]
在其中创建一个BaseController和一个操作方法。在此操作方法中,获取上面的数据库名称并从中返回部分视图。在该局部视图中编写html以返回一个简单的字符串作为数据库名称
对此操作方法使用OutputCache和ChildActionAttribute属性来缓存数据库名称并仅将其用作部分视图。
现在,在您的布局页面中,使用@ {Html.RenderAction(&#34; actionName&#34;,new {controller =&#34; name&#34;});}代替@Model渲染此局部视图。页脚中的DatabaseName