Razor, c#, asp.net:如何在@if比较之后显示一行纯文本
本文关键字:显示 一行 文本 之后 @if net asp Razor 比较 | 更新日期: 2023-09-27 18:04:53
我正在用Razor/c#做一个概念验证页面。
我有一个select
下拉列表,我需要在比较后将selected
输出到一个选项。
我希望做这样的事情:
<option value="Washington"
@if (String.Compare(@location, "Washington", true) == 0) {
selected
} >Washington</option>
我总是得到编译错误。
有什么快速解决办法吗?
你应该使用条件属性,而不是所有的if...else
的东西:
<option selected="@(location == "Washington")">Washington</option>
如果表达式的计算结果为false
,则根本不呈现该属性。如果计算结果为true
,则渲染为selected="selected"
。
另外,如果选项与文本值相同,则不需要添加value
属性。
通常我是这样做的
@((x==b) "somthing if they are ==" : "they are not ==")
所以你的看起来像
<option value="Washington" @(@location.ToLower().Equals("Washington".ToLower()) ? "selected" : "")>
Washington
</option>
我认为你的问题是@location
前面的@
。因为你是在c#上下文中,所以你不应该转义变量名。
我通常做的是将我想要包含或不包含的HTML位设置为单独的变量。在本例中,您可以这样做:
@{
string optionSelected = (String.Compare(location, "Washington", true) == 0) ? "selected" : string.Empty;
}
<option value="Washington" @(optionSelected)>Washington</option>
这提高了可读性,并使逻辑与表示分离。
有几种不同的方法可以做到这一点,您可以使用@:
@if (String.Compare(location, "Washington", true) == 0) {
@:selected
}
或者使用<text>
伪标签
@if (String.Compare(location, "Washington", true) == 0) {
<text>selected</text>
}
请注意,如果您试图填充标记的属性,您应该意识到在Razor引擎的后续版本中,如果属性的值为null,则根本不会呈现该属性。这使得您可以轻松地使用简单的三元操作:
<option value="Washington"
selected="@(string.Compare(location, "Washington", true)==0?"selected":null)">
Washington</option>
最后,你可能会对Phil Haack的Razor语法快速参考感兴趣。
@if (String.Compare(@location, "Washington", true) == 0) {
<option value="Washington" selected>Washington</option>
}
else
{
<option value="Washington">Washington</option>
}