C# 从_layout.cshtml中的数据库加载数据
我正在使用ASP.NETMVC4创建一个web应用程序 我想在所有页面上显示用户的昵称,因此必须将其加载到C# 从_layout.cshtml中的数据库加载数据,c#,asp.net,asp.net-mvc,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 4,我正在使用ASP.NETMVC4创建一个web应用程序 我想在所有页面上显示用户的昵称,因此必须将其加载到\u layout.cshtml中 请注意,我正在手动存储用户的昵称。(在我自己的数据库和表中。) 我可以通过Membership.GetUser().UserName添加用户的用户名,但我想从数据库加载他的昵称,并在\u layout.cshtml中显示它 如何做到这一点?让我为您提供一个简单的解决方案: 在控制器中写入操作(我的是CommonController): 在布局中的任意位置放
\u layout.cshtml
中
请注意,我正在手动存储用户的昵称。(在我自己的数据库和表中。)
我可以通过Membership.GetUser().UserName
添加用户的用户名,但我想从数据库加载他的昵称,并在\u layout.cshtml
中显示它
如何做到这一点?让我为您提供一个简单的解决方案: 在控制器中写入操作(我的是CommonController): 在布局中的任意位置放置以下行:
nickname = @{Html.RenderAction("NickName", "Common");}
完了
感谢@SergRogovtsev推荐:
nickname = @Html.Action("NickName", "Common")
第一个问题:
您正在使用实体框架吗?
您可以使用EF或ADO在_布局中使用局部视图。
若您的意思是不能使用实体框架访问aspnet_成员资格表,那个么您应该用另一种方式提问
通过提供一些代码示例,让我进一步了解您的问题。我建议您在登录时,将用户名存储在会话变量中(这是通过访问会话对象来完成的,该对象实现了一种键=值对体系结构,允许您随意存储和检索数据)。必须对每个加载的页面进行数据库调用是对性能的拖累,会话中的一个昵称字符串变量不会占用服务器上那么多空间
至于加载变量,您可以使用Vahid发布的代码,但如果您的站点还处于起步阶段,我建议您花额外的时间学习和实现实体框架。它更干净、更简单,而且微软正朝着这个方向推动数据连接管理。我使用了Creoste先生和Vahid先生的答案 我在一个会话中保存昵称(正如_Cresotoe先生所说),如果没有这样的会话(例如,如果用户勾选了“记住我”复选框,并且在多次访问之后访问),我将使用
RenderAction
创建该会话。(正如瓦希德所说)
谢谢你们 不,我没有使用实体框架。我正在通过
SqlConnection
s连接到数据库。此外,我也没有尝试访问aspnet\u成员资格表或任何asp.net表。我说,我在自己的表中存储昵称。@VahidHassani您考虑过RenderAction
的性能影响吗?@SergRogovtsev您是对的!在我的解决方案中没有考虑性能,但它是简单性和性能之间的折衷。在示例中,您没有关闭SqlConnection
。最好把它关上!Html.Action和Html.RenderAction之间有什么区别?请查看中详细介绍的方法。定义“更简单”。当然,您可以在layour代码中访问数据库,但这违背了MVC的理念。我同意,但对于这样简单的东西来说,它有太多的工作:)乍一看似乎很简单。一旦你考虑到所有的影响,它就不再那么简单了。此外,大部分工作已经完成。
nickname = @Html.Action("NickName", "Common")