使用 Composite C1 的 Razor 中的三元函数不断将引号重写为实体

Ternary function in Razor using Composite C1 keeps rewriting quotes as entities

我试图在 Composite C1 函数中做一些非常直接的事情,但我相信 Composite 将函数的 HTML 输出视为 [=32] =] 导致问题。不幸的是,我找不到解决这个问题的方法。所以这是有问题的代码行:

<input type="radio" name="@inputName" value="@radioLabel" required="@required" @(radioLabel.Trim() == inputValue.Trim() ? @"checked=""checked""" : "") />

最后的三元函数其实就是问题所在。输出最终应该是

checked = "checked"

但是引号变成了实体,最终变成了

checked=&quot;checked&quot; 

这是错误的图片


好吧,实际上有一个简单的方法可以使用下面的标准 if/else 逻辑来解决这个问题,但我仍然想知道这个问题的答案,因为我有很多 Composite C1 -ism 过去喜欢这样,想要一个解决方案。

@if(radioLabel.Trim() == inputValue.Trim())
{
  <input type="radio" name="@inputName" value="@radioLabel" required="@required" checked="checked" />
}
else
{
  <input type="radio" name="@inputName" value="@radioLabel" required="@required" />
}

如何使用 Html.Raw():

<input type="radio" name="@inputName" value="@radioLabel" required="@required" @(radioLabel.Trim() == inputValue.Trim() ? Html.Raw("checked=\"checked\"") : Html.Raw(""))  />

还有 if 块而不是像这样的三元函数:

<input type="radio" name="@inputName" value="@radioLabel" required="@required" @if(radioLabel.Trim() == inputValue.Trim()) { @Html.Raw("checked=\"checked\"") } />

我不是 Razor 方面的专家,但希望这会有所帮助:)

你做错了,把 Razor 当作一个 StringBuilder,尽管它比那更聪明。特别是在这种情况下,您应该使用 Conditional Attributes

正确的代码不是使用 Html.Raw,而是如果您不希望它被渲染,则将您的属性值设置为 null。

@{
    string checked = radioLabel.Trim() == inputValue.Trim() ? "checked" : null;

   <input type="radio" name="@inputName" value="@radioLabel" required="@required" checked="@checked" />
}