从_layout.cshtml中的数据库加载数据

本文关键字:数据库 加载 数据 layout cshtml | 更新日期: 2024-10-24 07:07:36

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

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

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

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

如何做到这一点?

从_layout.cshtml中的数据库加载数据

让我为您提供一个简单的解决方案:在控制器中写一个动作(我的是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表,那么您应该用另一种方式来提问!

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

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

至于加载变量,你可以使用Vahid发布的代码,但如果你的网站还处于起步阶段,我建议你花额外的时间学习和实现实体框架。它更干净、更容易,微软正在朝着这个方向推动数据连接管理。

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

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

谢谢你们!