我正在尝试在Composite C1函数中做一些非常直接的事情,但我相信这个事实是Composite会因为XML导致问题而处理函数的HTML输出。不幸的是,我无法找到解决这个问题的方法。所以这是令人讨厌的代码行:
<input type="radio" name="@inputName" value="@radioLabel" required="@required" @(radioLabel.Trim() == inputValue.Trim() ? @"checked=""checked""" : "") />
最后的三元函数实际上就是问题所在。输出最终应该是
checked = "checked"
但是引号会变成实体而最终会成为
checked="checked"
这是错误的图片
嗯,实际上有一个简单的方法可以使用下面的标准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" />
}
答案 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" />
}