【发布时间】:2020-03-07 23:48:11
【问题描述】:
我们在构建最近从 .NET Core 2.2 迁移到 3.0 的 ASP.NET Core MVC 应用程序时遇到以下错误:
标签助手“input”(或“textarea”或任何其他)不得具有 C# 在元素的属性声明区。
我们使用 Razor @functions 返回 HTML 属性内容以解决该问题,但是当您使用变量从函数返回它而没有任何额外逻辑时它看起来很丑(函数 dummy(htmlAttributeContent) 返回 htmlAttributeContent)
@{
var roAttrHTML = "";
if (!user.GotAccessToken("someToken")) {
roAttrHTML = " readonly=\"readonly\" ";
}
}
<textarea class="testClass" asp-for="testId" @readonlyAttribute>@Model.Id</textarea>
实际上我们得到了错误
标签助手“textarea”的元素属性中不得包含 C# 申报区。
当编译我们的 ASP.NET Core MVC 应用程序时,我们需要找到方法(最好不使用@functions),这将为我们提供一种解决该问题的方法(因为我们有很多页面具有类似的逻辑,我们需要触摸一次,避免在未来 .NET Core 版本中支持属性的可能的新更改出现任何可能的问题)
【问题讨论】:
-
你是如何定义
@readonlyAttribute的?我在asp.net core 2.2中也会遇到同样的错误。为什么不试试readonly=@readonlyAttribute? -
@Rena 这应该是公认的答案!
-
@MDummy 实际上,什么都不做,因为
readonly属性的值无关紧要,一旦它在那里,该字段就是只读的
标签: model-view-controller razor asp.net-core-3.0