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

时间:2015-03-03 21:23:40

标签: razor content-management-system c1-cms

我正在尝试在Composite C1函数中做一些非常直接的事情,但我相信这个事实是Composite会因为XML导致问题而处理函数的HTML输出。不幸的是,我无法找到解决这个问题的方法。所以这是令人讨厌的代码行:

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

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

checked = "checked"

但是引号会变成实体而最终会成为

checked=&quot;checked&quot; 

这是错误的图片 enter image description here


嗯,实际上有一个简单的方法可以使用下面的标准if / else逻辑解决这个问题,但是我仍然想知道这个问题的答案,因为我有这样的复合C1-isms就像这样在过去,想要一个解决方案。

@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" />
}

2 个答案:

答案 0 :(得分:1)

如何使用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的专家,但希望这会有所帮助:)

答案 1 :(得分:1)

你做错了,把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" />
}