【问题标题】:Load data from database in _layout.cshtml从 _layout.cshtml 中的数据库加载数据
【发布时间】:2012-08-04 11:25:12
【问题描述】:

我正在使用 ASP.NET MVC 4 创建一个 Web 应用程序。

我想在所有页面上显示用户的昵称,所以我必须在_layout.cshtml 中加载它。

请注意,我正在手动存储用户的昵称。 (在我自己的数据库和我自己的表中。)

我可以通过Membership.GetUser().UserName添加用户的用户名,但我想从数据库中加载他的昵称并显示在_layout.cshtml中。

怎么做?

【问题讨论】:

  • 请查看this answer中详细介绍的方法。
  • 定义“更简单”。当然你可以在你的布局代码中访问数据库,但这违背了 MVC 的想法。
  • 我同意,但是对于像这样简单的事情来说,它的工作量太大了 :)
  • 乍一看似乎很简单。一旦你想到所有的含义,它就不再那么简单了。此外,大部分工作已经完成。

标签: c# asp.net asp.net-mvc asp.net-mvc-4


【解决方案1】:

让我为您想要的内容提供一个简单的解决方案: 在控制器中编写一个动作(我的是 CommonController):

    public ActionResult NickName()
    {
        SqlConnection cn = new SqlConnection(cnstr);
        SqlCommand cmd = new SqlCommand(cmdStr, cn);
        cn.Open();
        SqlDataReader dr = cmd.ExecuteReader();
        string nickName = string.Empty;

        while (dr.Read())
        {
            nickName = dr["nick_Name"].ToString();
        }

        dr.close()
        return Content(nickName);
    }

将下面一行放在 _Layout 中任何你想要的地方:

         nickname = @{Html.RenderAction("NickName", "Common");}

完成!

感谢@SergRogovtsev 的推荐:

       nickname = @Html.Action("NickName", "Common")

第一次问: 你在使用实体框架吗? 您可以使用 EF 或 ADO 在 _Layout 中使用部分视图。 如果您的意思是您无法使用实体框架访问 aspnet_membership 表,您应该以另一种方式提出您的问题!

通过提供一些代码示例,让我更多地了解您的问题。

【讨论】:

  • 不,我没有使用实体框架。我通过SqlConnections 连接到数据库。此外,我没有尝试访问 aspnet_membership 表或任何 asp.net 表。我说,我将昵称存储在自己的表中。
  • @VahidHassani 您是否考虑过RenderAction 对性能的影响?
  • @SergRogovtsev 你说得对!我的解决方案没有考虑性能,但它是简单性和性能之间的权衡。
  • 你还没有关闭示例中的SqlConnection。最好关闭它!
  • Html.Action 和 Html.RenderAction 有什么区别?
【解决方案2】:

我建议您在登录时将用户名存储在会话变量中(这是通过访问 Session 对象来完成的,该对象实现了 key=value 对架构,允许您随意存储和检索数据)。必须为每个加载的页面进行数据库调用会拖累性能,并且会话中的单个昵称字符串变量不会占用服务器上那么多空间。

就加载变量而言,您可以使用 Vahid 发布的代码,但如果您的网站仍处于起步阶段,我建议您花额外的时间来学习和实施 Entity Framework。它更干净、更容易,而且微软确实在朝着这个方向推进数据连接管理。

【讨论】:

    【解决方案3】:

    我使用了 Mr_Creostoe 和 Vahid 答案的组合。

    我在会话中保存昵称(如 Mr_Cresotoe 所说),如果没有这样的会话(例如,如果用户勾选了 记住我 复选框并在多次访问后),我'将使用RenderAction 创建该会话。 (正如瓦希德所说)。

    谢谢你们!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-01-03
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多