.net 在LoginPartial视图上使用自定义值而不是User.Identity.Name
通常_LoginPartial.cshtml有以下内容:.net 在LoginPartial视图上使用自定义值而不是User.Identity.Name,.net,asp.net-mvc,.net,Asp.net Mvc,通常_LoginPartial.cshtml有以下内容: Hello, @Html.ActionLink(User.Identity.Name, "Manage", "Account", routeValues: null, htmlAttributes: new { @class = "username", title = "Manage" })! 我想使用LoginModel模型中的自定义字段,而不是User.Identity.Name。 我该怎么做 或者可以设置为User.Identit
Hello, @Html.ActionLink(User.Identity.Name, "Manage", "Account", routeValues: null, htmlAttributes: new { @class = "username", title = "Manage" })!
我想使用LoginModel模型中的自定义字段,而不是User.Identity.Name。
我该怎么做
或者可以设置为User.Identity.Name而不是login吗?您可以使用ViewBag将信息从控制器操作传递到视图。因此,您可以在您在OnActionExecuting中设置ViewBag的基本控制器中创建一个从控制器继承的基本控制器。所有其他控制器都可以从基本控制器继承
然后,您可以在布局或任何其他局部视图中使用Viewbag。您可以使用Viewbag将信息从控制器操作传递到视图。因此,您可以在您在OnActionExecuting中设置ViewBag的基本控制器中创建一个从控制器继承的基本控制器。所有其他控制器都可以从基本控制器继承
然后,您可以在布局或任何其他局部视图中使用Viewbag。对于全局性的内容,如布局,您应该使用子操作(如果尚未使用)。尝试为每个视图单独填充
ViewBag
变量之类的操作只会导致失败,因为您不可避免地会忘记,或者一些新开发人员不知道如何操作
通过一个子操作,您可以将任何您喜欢的作为模型传递给您的局部视图,这使您能够从持久性存储中实际查找您的用户,并使用您喜欢的任何属性
[ChildActionOnly]
public ActionResult LoginPartial()
{
// ASP.NET Identity
var user = UserManager.FindById(User.Identity.GetUserId());
// Membership
// var user = db.UserProfiles.SingleOrDefault(m => m.UserName == User.Identity.Name);
return PartialView("_LoginPartial", user);
}
然后,在您的局部视图中,对于身份:
@model Namespace.To.ApplicationUser
或者,有会员资格
@model Namespace.To.UserProfile
然后,继续引用用户实例的任何属性
要在布局中调用子操作,请执行以下操作:
@Html.Action("LoginPartial", "Account")
(我假设您已经将子操作放置在您的
AccountController
,这似乎是最符合逻辑的位置)对于全局性的东西,如布局,您应该使用子操作,如果您还没有这样做的话。尝试为每个视图单独填充ViewBag
变量之类的操作只会导致失败,因为您不可避免地会忘记,或者一些新开发人员不知道如何操作
通过一个子操作,您可以将任何您喜欢的作为模型传递给您的局部视图,这使您能够从持久性存储中实际查找您的用户,并使用您喜欢的任何属性
[ChildActionOnly]
public ActionResult LoginPartial()
{
// ASP.NET Identity
var user = UserManager.FindById(User.Identity.GetUserId());
// Membership
// var user = db.UserProfiles.SingleOrDefault(m => m.UserName == User.Identity.Name);
return PartialView("_LoginPartial", user);
}
然后,在您的局部视图中,对于身份:
@model Namespace.To.ApplicationUser
或者,有会员资格
@model Namespace.To.UserProfile
然后,继续引用用户实例的任何属性
要在布局中调用子操作,请执行以下操作:
@Html.Action("LoginPartial", "Account")
(我假设您已将子操作放置在您的
AccountController
中,这似乎是最符合逻辑的位置)在任何模型属性中设置User.Identity.Name
在控制器中说myprop
,然后在@model.myprop
内设置User.Identity.Name
在任何模型属性中说myprop
,然后在控制器中使用@model.myprop
actionlink
。虽然这种方法可以很好地工作,但建议在这些情况下使用子操作。如果您依靠一个基本控制器向布局提供它所需的特定数据段,那么您的所有控制器必须始终从该基本控制器继承。如果您忘记了,或者一个新的开发人员不知道他/她需要从这个基础继承,那么事情会变得更糟,没有明显的原因。虽然这种方法可以很好地工作,但建议在这些情况下使用子操作。如果您依靠一个基本控制器向布局提供它所需的特定数据段,那么您的所有控制器必须始终从该基本控制器继承。如果你忘记了,或者一个新的开发人员不知道他/她需要从这个基础上继承,那么事情就会变得一团糟,没有明显的原因。+1伟大的解决方案!我使用这种方法在左侧菜单上显示未完成订单的数量。谢谢Chris。这会导致HTTP错误404.15-找不到或更好地称为RequestFilteringModule overflow,当用户未经身份验证时,不确定原因,但似乎在达到限制之前,登录(字符串returnUrl)是在深循环中调用的reach@CesarRomeroo:确保子操作标记为[AllowAnonymous]
或位于未使用[Authorize]
修饰的控制器中。否则,子操作本身将需要授权,如果它是布局的一部分,尝试加载登录页面进行授权将创建重定向循环。+1伟大的解决方案!我使用这种方法在左侧菜单上显示未完成订单的数量。谢谢Chris。这会导致HTTP错误404.15-找不到或更好地称为RequestFilteringModule overflow,当用户未经身份验证时,不确定原因,但似乎在达到限制之前,登录(字符串returnUrl)是在深循环中调用的reach@CesarRomeroo:确保子操作标记为[AllowAnonymous]
或位于未使用[Authorize]
修饰的控制器中。否则,子操作本身将需要授权,如果它是布局的一部分,尝试加载登录页面进行授权将创建重定向循环。