显式 Razor 表达式在 @foreach 输出模型属性中不起作用并与文本连接
Posted
技术标签:
【中文标题】显式 Razor 表达式在 @foreach 输出模型属性中不起作用并与文本连接【英文标题】:Explicit Razor expressions not working in @foreach output model property and concatenate with text 【发布时间】:2021-11-16 00:02:48 【问题描述】:我想创建以下标记
<tr onclick="toggle(110)" data-order-id-110=110><td>foo</td></tr>
重要的部分是data-attribute data-order-id-110=110
。对于我模型中的每个项目,id(此处为 110)应写为包含 id
在本例中为 110
的数据属性。
根据我对Explicit Razor expressions的理解
@() 括号内的任何内容都会被评估并呈现到输出。
写出来应该够用了
// 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>
也试过了
@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 Files\dotnet\sdk]
.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 数据属性与模型中的属性连接起来
【问题讨论】:
尝试将@(@order.id) 改为@Html.Raw(order.id) 应该没问题 我认为你应该用data-order-id-@(order.Id)=@order.Id
替换data-order-id-@=@order.Id=@order.Id
@ɐsɹǝʌǝɔıʌ 这个我也试过了,见上面的更新
我不明白为什么data-order-id-@order.Id=@order.Id
不起作用?
@daremachine:这个<tr onclick="toggleOrderDetails(@order.Id)" data-order-id-@Html.Raw(order.id)=@order.Id>
返回这个标记<tr onclick="toggleOrderDetails(1)" data-order-id-@html.raw(order.id)="1"> .... </tr>
【参考方案1】:
我能够像这样解决它
@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>
【讨论】:
以上是关于显式 Razor 表达式在 @foreach 输出模型属性中不起作用并与文本连接的主要内容,如果未能解决你的问题,请参考以下文章
在 Knockout foreach 循环中编写 HTML 代码(通过 Razor 调用)
c# razor mvc textboxfor in foreach 循环
如果在foreach循环下动态生成Textarea不止一次,如何在Razor(blazor)组件中获取Textarea值