在用剃刀尝试ASP.NET Core 2.2 MVC的过程中,我为此感到困惑,而且我仍然不确定为什么我以前的尝试-我认为它模仿了我在stackoverflow上看到的内容-没有显示选定的选项,但这是一种魔术药:
在vwProjectViewModel中,我有:
public List<SelectListItem> PageNumbers { get; set; }
public int PageNumber { get; set; }
这是cshtml视图片段:
@model vwProjectViewModel
<select name="PageNumber" id="PageNumber"
asp-items='new SelectList(@Model.PageNumbers,
"Value", "Text",
Model.PageNumber)'>
</select>
这是一个问题:为什么在选择标记中添加 asp-for =“ PageNumber” 会如此粗心地破坏它,使其不再显示所选的选项?
此外,为什么这种简单的语法不显示所选选项(我在这里看不到吗?):
<select asp-for="PageNumber" asp-items="@Model.PageNumbers"></select>
或
<select asp-for="PageNumber" asp-items="Model.PageNumbers"></select>
这似乎也显示了选定的选项,但不够优雅:
<select name="PageNumber" id="PageNumber">
@{
@foreach (SelectListItem @item in @Model.PageNumbers)
{
@if (@Model.PageNumber.ToString() == @item.Value)
{
<option value="@item.Value" selected="selected">@item.Text</option>
}
else
{
<option value="@item.Value" >@item.Text</option>
}
}
}
</select>
有人在乎这个古怪的标签助手吗?
答案 0 :(得分:0)
<select id="PageNumber" asp-for="PageNumber" asp-items="Model.PageNumbers"> </select>
如果PageNumber
的值与SelectListItem
的值匹配,它将设置为选定状态:
List<SelectListItem> selectListItems = new List<SelectListItem>();
selectListItems.Add(new SelectListItem() { Value = "1", Text = "1" });
selectListItems.Add(new SelectListItem() { Value = "2", Text = "2" });
然后:
vwProjectViewModel mymodel = new vwProjectViewModel();
mymodel.PageNumbers = new List<SelectListItem>();
mymodel.PageNumbers = selectListItems;
mymodel.PageNumber = 2;