显式Razor表达式不能在@foreach输出模型属性中工作,不能与文本连接



我想创建以下标记

<tr onclick="toggle(110)" data-order-id-110=110><td>foo</td></tr>

重要的部分是数据属性data-order-id-110=110。对于我的模型中的每个项目,id(这里是110)应该写成一个数据属性,其中包括id(在本例中为110)。

根据我对Explicit Razor表达式的理解

@()括号内的任何内容都将被计算并呈现到输出中。

应该可以写

// this code
data-order-id-@(@order.Id)=@order.Id
// actual returns 
data-order-id@(@order.id)="1"
// expected
data-order-id-1="1"

所以除了@(@),我还尝试了@{=@},像这样

data-order-id-@(@order.Id)=@order.Id
data-order-id-@{=@order.Id}=@order.Id

两个都不起作用,见下文。

我的代码我试着

<tr onclick="toggleOrderDetails(@order.Id)" 
data-order-id-@(order.Id)=@order.Id>

返回

<tr onclick="toggleOrderDetails(1)" data-order-id-@(order.id)="1">
.....
</tr>

和also tried

@foreach (var order in Model.Orders)
{
<tr onclick="toggleOrderDetails(@order.Id)" data-order-id-@{=@order.Id}=@order.Id>
<td>@order.Id</td>
<td>@order.CustomerId</td>
<td>@order.OrderDate</td>
</tr> 
}

html输出

<tr onclick="toggleOrderDetails(1)" data-order-id-@{="1}=1">
<td>1</td>
<td>1</td>
<td>26.08.2021 10:30:00</td>
</tr>

可以看到,创建的不是data-order-id-1=1,而是字符串data-order-id-@{="1}=1

  • 期望值:data-order-id-1=1
  • 实际:data-order-id-@{="1}=1

其他人向我们提到了@:,但这不起作用

安装版本
dotnet --info

返回
.NET Core SDK (reflecting any global.json):
Version:   3.1.118     Commit:    42170158ee
Host (useful for support):
Version: 3.1.18        Commit:  5d3919d34e
.NET Core SDKs installed:
3.1.118 [C:Program Filesdotnetsdk]
.NET Core runtimes installed:
Microsoft.AspNetCore.App 3.1.18 
Microsoft.NETCore.App 3.1.18 
Microsoft.WindowsDesktop.App 3.1.18 

class MvcServiceCollectionExtensions的集合为

#region Assembly Microsoft.AspNetCore.Mvc
, Version=3.1.0.0, Culture=neutral
, PublicKeyToken=adb9793829ddae60
// Microsoft.AspNetCore.Mvc.dll
#endregion

问题我需要什么来连接一个html数据属性与一个模型的属性

我可以这样解决它

@foreach (var order in Model.Orders)
{
string attribute = "data-order-id-"+@order.Id;
<tr onclick="toggleOrderDetails(@order.Id)" @(attribute)=@order.Id>
}

返回标记

<tr onclick="toggleOrderDetails(1)" data-order-id-1="1">
....
</tr>