Кажется, я не могу вывести var внутри тега. Раньше я делал это, как показано ниже, в бритве MVC2. Но теперь похоже, что тег выглядит как какой-то зарезервированный тег.
<select class = "form-control" id = "CompanyId" name = "CompanyId">
@{
foreach (var item in Model.Companies)
{
var selected = "";
if (item.CompanyId == Model.CompanyId)
{
selected = "selected";
}
<option value = "@item.CompanyId" @selected>@item.Name</option>
}
}
</select>
Попробуйте другой подход, как показано ниже:
<select class = "form-control" id = "CompanyId" name = "CompanyId">
@{
foreach (var item in Model.Companies)
{
if (item.CompanyId == Model.CompanyId)
{
<option value = "@item.CompanyId" selected>@item.Name</option>
}
else
{
<option value = "@item.CompanyId">@item.Name</option>
}
}
}
</select>
Это неправильный способ писать бритву, вы относитесь к нему как к тексту HTML. Используйте логическое значение внутри атрибута, и он будет хорошо использовать атрибут, когда он оценивает значение true, и не будет отображать атрибут вообще, если он равен false (или null).
<select class = "form-control" id = "CompanyId" name = "CompanyId">
@foreach (var item in Model.Companies)
{
<option value = "@item.CompanyId" selected = "@(item.CompanyId == Model.CompanyId)">@item.Name</option>
}
</select>
Но вместо этого вы должны использовать помощники тегов и привязку модели, это значительно упростит сопровождение вашего кода.
Вид
@model HomeViewModel
<select class = "form-control" asp-for = "CompanyId" asp-items = "Model.Companies"></select>
Модель(при условии, что параметры выбора статичны, в противном случае заполняются внутри контроллера)
public class HomeViewModel
{
public string CompanyId { get; set; }
public readonly List<SelectListItem> Companies = new List<SelectListItem>()
{
new SelectListItem("Microsoft", "Microsoft"),
new SelectListItem { Value = "Yahoo", Text = "Yahoo" },
new SelectListItem { Value = "Google", Text = "Google", Disabled = true, Selected = false }
};
}
Контроллер
public IActionResult Index()
{
HomeViewModel model = new HomeViewModel
{
CompanyId = "Yahoo"
};
return View(model);
}