< $ G + $> ASP.NET MVC5 Helper中出现奇怪的字符

时间:2013-11-13 23:11:21

标签: c# asp.net asp.net-mvc razor asp.net-mvc-5

视图中的帮助程序,用于显示在应用程序中注册的用户的全名,以及通过第三方认证登录时的用户名。

@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,它显示如下:

enter image description here

为什么会出现这些奇怪的角色(<$G+$>),以及如何摆脱它们?

2 个答案:

答案 0 :(得分:0)

在Visual Studio Page Inspector中使用帮助程序可能是某种功能或错误,您可能无法在外部浏览器下看到这些标记。我在VS 2013中轻松复制了它。有关它的主题可以在ASP.NET forum

上找到

答案 1 :(得分:0)

似乎这些有趣的角色是由助手生成的。问题似乎是助手的输出并不意味着作为常规string使用。显然它会生成一些控制字符,这些控件字符适用于Razor,但如果我们尝试将输出用作常规字符串(因为@Html.ActionLink()期望其参数),它们将变为可见。

为了摆脱它们,我不应该在@ GetUserName()中使用Html.ActionLink()帮助器,而是在控制器中获取UserName,并通过viewmodel的属性传递它。在我看来,我不应该有这种逻辑。