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

时间:2012-08-04 11:25:12

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

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

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

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

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

怎么做?

3 个答案:

答案 0 :(得分:2)

让我给出你想要的简单解决方案: 在控制器中编写一个动作(我的是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表,你应该用另一种方式提出你的问题!

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

谢谢你们!