我正在使用 ASP.NET MVC 4 创建一个 Web 应用程序。
我想在所有页面上显示用户的昵称,所以我必须将它加载到_layout.cshtml
.
请注意,我正在手动存储用户的昵称。(在我自己的数据库和我自己的表中。)
我可以通过添加用户的用户名Membership.GetUser().UserName
,但我想从数据库中加载他的昵称并将其显示在_layout.cshtml
.
怎么做?
我正在使用 ASP.NET MVC 4 创建一个 Web 应用程序。
我想在所有页面上显示用户的昵称,所以我必须将它加载到_layout.cshtml
.
请注意,我正在手动存储用户的昵称。(在我自己的数据库和我自己的表中。)
我可以通过添加用户的用户名Membership.GetUser().UserName
,但我想从数据库中加载他的昵称并将其显示在_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 对象来完成的,该对象实现了键=值对架构,允许您随意存储和检索数据)。必须为每个加载的页面进行数据库调用会拖累性能,并且会话中的单个昵称字符串变量不会占用服务器上的那么多空间。
至于加载变量,您可以使用 Vahid 发布的代码,但如果您的网站仍处于起步阶段,我会建议您花额外的时间来学习和实施 Entity Framework。它更干净、更容易,微软确实在朝着这个方向推动数据连接管理。
我使用了 Mr_Creostoe 和 Vahid 答案的组合。
我在会话中保存昵称(如 Mr_Cresotoe 所说),如果没有这样的会话(例如,如果用户勾选记住我复选框并在多次访问后),我将使用RenderAction
. (正如瓦希德所说)。
谢谢你们!