努力与剃刀选择助手

时间:2019-09-27 00:17:34

标签: asp.net-core select razor .net-core selected

在用剃刀尝试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>

有人在乎这个古怪的标签助手吗?

1 个答案:

答案 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;