【问题标题】:Display database name in footer在页脚中显示数据库名称
【发布时间】:2018-11-22 19:34:23
【问题描述】:

我希望能够从 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。

【问题讨论】:

  • 您还没有解释为什么它会崩溃,顺便说一下,这将是因为数据库名称和/或模型没有在每个控制器操作上填充。一个简单的搜索会带你到以下问题 - stackoverflow.com/questions/13225315/…
  • 我已经遵循...所有视图模型的基础
  • 您已经继承了base,但是您需要在每个控制器操作中设置数据库名称,或者找到另一种填充数据库名称和模型的方法。否则,请在答案中提供更多信息,因为现在没有任何有用的信息 - 只是“我正在这样做,我有问题”
  • 将数据库名称放在每个控制器中是愚蠢的。这就是为什么我要求更好的方法。
  • 从安全角度来看这是个好主意吗?也许您应该使用一些用户友好的名称来标识 DB,而不是 SQL Server 中出现的实际 DB 名称。通常,您不应在网页上提供有关系统的信息 - 任何可能帮助黑客的信息都应该保密

标签: c# asp.net-mvc entity-framework asp.net-core


【解决方案1】:

可以通过多种方式完成: 1.您可以将数据库名称存储在应用程序状态中。在 global.asax/startup 文件的 Application_Start() 方法中,您可以调用一个方法来将 DbName 设置为 Application State,如下所示:

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["DbName"] 的应用程序中使用

  1. 通过 Html.RenderAction 使用部分视图:

在其中创建一个 BaseController 和一个操作方法。在此操作方法中,如上获取数据库名称并从中返回部分视图。在该部分视图中编写 html 以返回一个简单的字符串作为数据库名称

在此操作方法上使用 OutputCache 和 ChildActionAttribute 属性来缓存数据库名称并仅将其用作部分视图。

现在在您的布局页面中,使用 @{Html.RenderAction("actionName", new { controller="name" } );} 代替页脚中的 @Model.DatabaseName 来呈现此部分视图

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-17
    • 1970-01-01
    • 2014-06-10
    • 1970-01-01
    • 2018-07-27
    • 1970-01-01
    • 2013-05-22
    • 2015-01-01
    相关资源
    最近更新 更多