【问题标题】:Print a variable on the screen using Razor (C#)使用 Razor (C#) 在屏幕上打印变量
【发布时间】:2016-09-21 12:46:06
【问题描述】:

我想使用 Razor 在屏幕上打印一个变量。我在HttpContext中保存了一个名为CustomPrincipal的类,保存正确。

我希望它像下面的示例一样放在一行上,但不幸的是它不起作用:

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

下面的例子虽然可以工作,所以它正确地保存到了 HttpContext。

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

有谁知道为什么第一个例子不起作用,你能告诉我一个解决方案吗?

错误是:

编译器错误消息:CS0118:“CustomPrincipal”是“类型”,但用作“变量”

【问题讨论】:

  • “不工作”是什么意思?你有错误信息吗?什么都没有显示?
  • 阅读How to Ask,详细说明“不工作”并分享您的研究。这是一个括号问题,您不能将字符串Name 转换为CustomPrincipal
  • 您可能只需要将CustomPrincipal 对象包装在括号中,否则它将尝试将整行转换为该类型:@(((CustomPrincipal)Context.Items["IUser"]).Name)
  • @DavidG 一组括号。 @(...) 格式将仅打印 ...,以便您可以预先添加和附加可能看起来像 C# 代码的文本。
  • 谢谢!这成功了:“@(((CustomPrincipal)Context.Items["IUser"]).Name)”。忘记了最后一组括号。

标签: c# asp.net-mvc razor umbraco umbraco7


【解决方案1】:

所有功劳归于@DavidG 和@CodeCaster,在 cmets 中提到。

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

括号是必需的,否则Object 类型上没有Name 属性,这就是Context.Items["IUser"] 的含义。我们必须先添加括号将Object 转换为CustomPrincipal,然后访问该类型的Name 属性。

同样问题的另一个例子:https://stackoverflow.com/a/4151988/4585226

【讨论】:

  • 该问题的第一个示例不起作用,因为它试图将Object Context.Items["IUser"]Name 属性转换为CustomPrincipal 类型,至少这是正在解释的内容。您的示例有效,因为它首先将Object 转换为CustomPrincipal,然后访问CustomPrincipal 类型的Name 属性。
猜你喜欢
  • 1970-01-01
  • 2013-04-18
  • 2012-03-06
  • 2014-03-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-08-08
  • 1970-01-01
相关资源
最近更新 更多