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>    

我总是得到编译错误。

有什么快速解决办法吗?

Razor, c#, asp.net:如何在@if比较之后显示一行纯文本

你应该使用条件属性,而不是所有的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>
}