视图中的帮助程序,用于显示在应用程序中注册的用户的全名,以及通过第三方认证登录时的用户名。
@using MyApp.Models;
@helper GetUserName()
{
if (User.Identity.AuthenticationType == "Application")
{
using (var db = new MyAppDbContext())
{
@db.Users.Find(User.Identity.GetUserId()).FullName
}
}
else
{
@User.Identity.GetUserName()
}
}
然后我使用这个助手:
@if (Request.IsAuthenticated)
{
using (Html.BeginForm("LogOff", "Account", FormMethod.Post, new { id = "logoutForm", @class = "navbar-form pull-right" }))
{
@Html.AntiForgeryToken()
<ul class="nav">
<li>
@Html.ActionLink("Hello " + GetUserName() + "!", "Manage", "Account", routeValues: null, htmlAttributes: new { title = "Manage" })
</li>
<li><a href="javascript:document.getElementById('logoutForm').submit()">Log off</a></li>
</ul>
}
}
我的用户名是Proba234,它显示如下:
为什么会出现这些奇怪的角色(<$G+$>
),以及如何摆脱它们?
答案 0 :(得分:0)
在Visual Studio Page Inspector中使用帮助程序可能是某种功能或错误,您可能无法在外部浏览器下看到这些标记。我在VS 2013中轻松复制了它。有关它的主题可以在ASP.NET forum
上找到答案 1 :(得分:0)
似乎这些有趣的角色是由助手生成的。问题似乎是助手的输出并不意味着作为常规string
使用。显然它会生成一些控制字符,这些控件字符适用于Razor,但如果我们尝试将输出用作常规字符串(因为@Html.ActionLink()
期望其参数),它们将变为可见。
为了摆脱它们,我不应该在@ GetUserName()
中使用Html.ActionLink()
帮助器,而是在控制器中获取UserName,并通过viewmodel的属性传递它。在我看来,我不应该有这种逻辑。