2013-11-13 2 views
3

Мой помощник в представлении, который предназначен для отображения полного имени пользователя, зарегистрированного в приложении, и имя пользователя, если он зарегистрирован через стороннюю аутентификацию.

@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+$>) появляются, и как избавиться от них?

+0

Является ли 'User.Identity.GetUserName()' метод расширения? –

+0

См. Http://stackoverflow.com/a/18451374/2270404 относительно 'User.Identity.GetUserName()' –

ответ

0

Кажется, что эти смешные персонажи генерируются помощником. Промелема, похоже, заключается в том, что выход хелпера не предназначен для использования как обычный string. По-видимому, он генерирует некоторые управляющие символы, которые предназначены для Razor, но если мы попытаемся использовать вывод как регулярную строку (так как ожидает свой аргумент), они становятся видимыми.

Чтобы избавиться от них, я не должен использовать вспомогательный помощник GetUserName() внутри @Html.ActionLink(), но получить имя пользователя в контроллере и передать его через свойство viewmodel. В любом случае, у меня не должно быть такой логики.

0

Возможно, это какая-то особенность или ошибка, связанная с использованием помощников в Visual Studio Page Inspector, вы, вероятно, не увидите эти теги под внешним браузером. Я легко воспроизвел его в VS 2013. Нить об этом можно найти, например, на ASP.NET forum

+0

Это действительно видно во внешнем браузере. Снимок экрана - от FireFox. –

Смежные вопросы