Отпечатайте променлива на екрана с помощта на Razor (C#)

Искам да отпечатам променлива на екрана с помощта на Razor. Имам клас с име CustomPrincipal, записан в HttpContext, който е записан правилно.

Искам да го има на един ред като примера по-долу, който за съжаление не работи:

@* This is not working... *@
@(CustomPrincipal)Context.Items["IUser"].Name

Примерът по-долу обаче работи, така че го записа правилно в HttpContext.

@{ CustomPrincipal user = (CustomPrincipal)Context.Items["IUser"]; }
@user.Name

Някой знае ли защо първият пример не работи и можете ли да ми покажете решение?

Грешката е:

Съобщение за грешка на компилатора: CS0118: „CustomPrincipal“ е „тип“, но се използва като „променлива“


person Yanick van Barneveld    schedule 21.09.2016    source източник
comment
Какво имаш предвид като не работиш? Имате ли съобщение за грешка? Нищо ли не се показва?   -  person DavidG    schedule 21.09.2016
comment
Прочетете Как да питате, разяснете по-подробно неработещото и споделете вашето проучване. Това е проблем със скоби, не можете да прехвърлите низа Name към CustomPrincipal.   -  person CodeCaster    schedule 21.09.2016
comment
Вероятно просто трябва да обвиете обекта CustomPrincipal в скоби, в противен случай той ще се опита да прехвърли целия ред към този тип: @(((CustomPrincipal)Context.Items["IUser"]).Name)   -  person DavidG    schedule 21.09.2016
comment
@DavidG Това също не работи, тогава просто отпечатва низа CustomPrincipal.Name на екрана.   -  person Yanick van Barneveld    schedule 21.09.2016
comment
@DavidG още един набор от скоби. Форматът @(...) ще отпечата само ..., така че да можете да добавяте пред и текст, който може да изглежда като C# код.   -  person CodeCaster    schedule 21.09.2016
comment
@CodeCaster Разбира се, добро място.   -  person DavidG    schedule 21.09.2016
comment
@YanickvanBarneveld Опитайте отново   -  person DavidG    schedule 21.09.2016
comment
Благодаря! Това свърши работа: @(((CustomPrincipal)Context.Items[IUser]).Name). Забравих последния набор от скоби.   -  person Yanick van Barneveld    schedule 21.09.2016


Отговори (1)


Всички кредити отиват на @DavidG и @CodeCaster, споменати в коментарите.

@(((CustomPrincipal)Context.Items["IUser"]).Name)

Скобите са необходими, защото в противен случай няма свойство Name на типа Object, каквото е Context.Items["IUser"]. Трябва първо да добавим скоби, за да преобразуваме това Object към CustomPrincipal, след което да получим достъп до свойството Name от този тип.

Друг пример за същия проблем: https://stackoverflow.com/a/4151988/4585226

person 476rick    schedule 29.09.2016
comment
Първият пример по въпроса не работи, защото се опитва да прехвърли свойството Name на Object Context.Items["IUser"] към типа CustomPrincipal, поне това е, което се интерпретира. Вашият пример работи, защото първо прехвърля Object към CustomPrincipal, след което осъществява достъп до свойството Name от типа CustomPrincipal. - person Zack; 29.09.2016