【问题标题】:Input tag helper isn't allowing the usage of nameof()输入标签助手不允许使用 nameof()
【发布时间】:2018-01-25 16:44:11
【问题描述】:

我的 ASP.NET Core 1.1 应用程序中有以下 ViewModel:

public class HomepageViewModel
{
    [Required]
    public string Description{ get; set; }
}

上面提到的 ViewModel 用于具有如下输入字段的视图中。 如您所见,我正在尝试使用 nameof() 指定输入标签助手的 asp-for 属性,以便在我重命名 ViewModel 中的属性时,更改也将应用于视图。

@model HomepageViewModel
[... various HTML Code...]

<input asp-for="@nameof(Model.Description)" class="form-control" />

无论如何这都不起作用,因为我收到以下错误消息:

System.InvalidOperationException - 模板只能用于字段访问、属性访问、单维数组索引或单参数自定义索引器表达式。

有没有办法像我尝试的那样使用 nameof(),或者出于任何特定原因不允许使用它?

【问题讨论】:

  • 尽管它可能看起来只是一个字符串,但实际上它不仅仅是一个字符串,并且为 asp-for 等标签助手属性提供了完整的 Intellisense。这实际上是这里的问题:它需要一个模型表达式(它提供了你想要的行为),但它却得到了一个字符串。

标签: asp.net-core


【解决方案1】:

asp-for 足以作为参考,足够智能的工具应该检测到这些并适当地重命名。

例如,我能够使用 Resharper 重命名一个属性,它适当地改变了我的视图。

【讨论】:

  • 我对 asp-for 感到奇怪的是,我可以为 asp-for 值输入一个无效的属性名称,我会得到一个编译错误(这很好)。但是,对于 asp-action 标记助手,我可以将 foo 作为操作名称,我将 not 得到编译器错误。但是,我可以在 asp-action 中使用 nameof(例如:asp-action="@nameof(MyController.MyAction)" 并且它工作正常。所以很奇怪 nameof 在一些标签助手中工作而不是其他标签。
猜你喜欢
  • 2017-03-22
  • 2019-07-30
  • 2017-03-18
  • 2023-04-03
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多