asp.net核心选项元素中的三元运算符

时间:2018-10-21 16:46:51

标签: asp.net-mvc asp.net-core-2.1

我正在使用asp.net core 2.1,我想使用selected option元素并在其中手动设置值,如以下代码所示:

<select>
   <option selected="@(typeCar== "Volvo" ? "selected" : string.Empty)" value="volvo">Volvo</option>
   <option selected="@(typeCar== "Saab" ? "selected" : string.Empty)" value="saab">Saab</option>
   <option value="vw">VW</option>
   <option value="audi">Audi</option>
</select>

但是当我想在它们两个中都使用三元运算符时,selected="selected"等于selected="",因此选择了这两个选项,显然selected="selected"和{{1 }},例如当selected=""在浏览器中查看页面源时如下所示:

typeCar=Volvo

并选择第二个选项! 我该如何解决这个问题?

2 个答案:

答案 0 :(得分:2)

从您的三元组返回null,而不是int traverse(char* directory) { struct dirent *currentDir; DIR *traverser = opendir(directory); if (traverser == NULL) { printf("Error: Could not open directory.\n"); return 0; } while ((currentDir = readdir(traverser)) != NULL) { if (currentDir->d_type == DT_DIR && strcmp(currentDir->d_name, ".") != 0 && strcmp(currentDir->d_name, "..") != 0) { int PID = fork(); forkCount++; char pathBuffer[1024]; if (PID == 0) { snprintf(pathBuffer, sizeof(pathBuffer), "%s/%s", directory, currentDir->d_name); traverse(pathBuffer); } else { listOfPIDS[forkCount] = PID; int status = 0; wait(&status); } } else if (strcmp(currentDir->d_name, ".") != 0 && strcmp(currentDir->d_name, "..") != 0) { printf("%s\n", currentDir->d_name); } } closedir(traverser); return 0; } 。如果该属性的值为null,Razor会自动将其删除,但是由于您将其设置为 something ,即使它只是一个空字符串,它也将持续存在。

string.Empty

答案 1 :(得分:0)

正如Shyju所说,您不能像当前示例那样使用三元运算符表达式来创建selected属性。像下面的示例一样使用JS / jQuery表达式:

$('select').append('<option value="' + typeCar + '"' + (typeCar == 'somevalue') ? ' selected="selected"' : '') + '>' + typeCar + '</option>';

或者直接使用<select>标签帮助程序:

<select asp-for="TypeCar" asp-items="Model.Cars"></select>

从包含SelectListItem的列表中填充:

public List<SelectListItem> Cars { get; set; } = CarsList.Select(x => new SelectListItem { Text = x.CarName, Value = x.CarId, Selected = x.IsSelected }).ToList();

更多参考:ASP.NET Core Tag Helpers