User.Identity.GetUserName() возвращает неправильно

Я не совсем уверен, что не так с этим простым кодом в представлении Razor:

@using Microsoft.AspNet.Identity
<span>@Html.DisplayName(User.Identity.GetUserName())</span>

Я проверил значение в поле таблицы AspNetUsers UserName, и оно равно [email protected].

Вместо этого верните [email protected], он просто вернет com.

Ради любопытства я изменил его на [email protected], действительно, он просто возвращает net.

Я попытался найти некоторые статьи и ничего не нашел. Что на самом деле не так с этим кодом?


person Jun Rikson    schedule 14.08.2018    source источник
comment
Почему вы проводите это через Html.DisplayName?   -  person Damien_The_Unbeliever    schedule 14.08.2018
comment
@Damien_The_Unbeliever: я снова попытался найти вопрос, но не нашел его, из того, что я читал ранее, он использует Html.DisplayName   -  person Jun Rikson    schedule 14.08.2018
comment
@John, это не дублируется, даже я использую Html.Label, все равно возвращаю com   -  person Jun Rikson    schedule 14.08.2018
comment
Вы используете функции, предназначенные для получения имен для полей модели и элементов управления. Хватит оборачивать его в какие-либо Html.Something функции.   -  person Damien_The_Unbeliever    schedule 14.08.2018
comment
Я могу ошибаться, но разве это не должно быть User.Identity.Name?   -  person Rob    schedule 14.08.2018
comment
@Colour Не используйте код из вопроса. Используйте код из ответа. ????   -  person Llama    schedule 14.08.2018
comment
Спасибо, я получил это из 2-го ответа от stackoverflow.com/questions/14387396/, я думал, что он отобразит строку   -  person Jun Rikson    schedule 14.08.2018
comment
@John, принятый ответ @Html.DisplayFor нельзя использовать в этом случае, так как это не модель, даже @Html.Display возвращает пустое значение. После попытки второй ответ @Html.encode помогает, но действительно ли это для отображения текста, а не для кодирования URL-адреса?   -  person Jun Rikson    schedule 14.08.2018
comment
И @User.Identity.GetUserName(), как следует из принятого ответа (изменено на ваш вариант использования), не работает?   -  person Llama    schedule 14.08.2018


Ответы (1)


когда вы просто хотите отобразить значение «Имя пользователя», доступное под идентификатором, какой смысл использовать DisplayName здесь? Метод отображаемого имени пытается найти атрибут display, доступный во вложенном свойстве, которое вы передали методу.

А вы помните, как работает этот метод MVC?? всякий раз, когда мы передаем какое-либо выражение в такие методы, оно обрабатывает его как вложенное свойство и пытается найти последний узел свойства.

например, для c.User.Name он попытается использовать name, поэтому, когда мы передаем [email protected], он попытается найти последнее свойство во вложенном выражении, которое равно [email protected], и значение будет net.

Но когда вы просто хотите отобразить значение, просто используйте

<span>@User.Identity.GetUserName()</span>
person Deepak Sharma    schedule 14.08.2018
comment
рад, что это помогло .. помните второй параграф, который я указал, и вы никогда не столкнетесь с этой проблемой. - person Deepak Sharma; 14.08.2018
comment
Теперь я понял, поэтому DisplayName ищу .net название свойства, которое net. благодарю вас - person Jun Rikson; 14.08.2018