Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 在LoginPartial视图上使用自定义值而不是User.Identity.Name_.net_Asp.net Mvc - Fatal编程技术网

.net 在LoginPartial视图上使用自定义值而不是User.Identity.Name

.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

通常_LoginPartial.cshtml有以下内容:

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]
修饰的控制器中。否则,子操作本身将需要授权,如果它是布局的一部分,尝试加载登录页面进行授权将创建重定向循环。