我似乎无法在标记内输出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>
答案 0 :(得分:0)
尝试以下类似方法:
<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>
答案 1 :(得分:0)
这不是写剃刀的正确方法,您将其视为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);
}