我需要一些帮助与选择标签助手在ASP。净的核心。

我有一个员工列表,我试图将其绑定到一个选择标记帮助程序。我的员工在List<Employee> EmployeesList中,所选值将进入EmployeeId属性。我的视图模型是这样的:

public class MyViewModel
{
   public int EmployeeId { get; set; }
   public string Comments { get; set; }
   public List<Employee> EmployeesList {get; set; }
}

我的员工类是这样的:

public class Employee
{
   public int Id { get; set; }
   public string FullName { get; set; }
}

我的问题是,我如何告诉我的选择标记助手使用Id作为值,同时在下拉列表中显示FullName ?

<select asp-for="EmployeeId" asp-items="???" />

如果你能帮我,我会很感激的。谢谢。


当前回答

在得到:

public IActionResult Create()
{
    ViewData["Tags"] = new SelectList(_context.Tags, "Id", "Name");
    return View();
}

在文章:

var selectedIds= Request.Form["Tags"];

视图:

<label>Tags</label>
<select  asp-for="Tags"  id="Tags" name="Tags" class="form-control" asp-items="ViewBag.Tags" multiple></select>

其他回答

asp-items需要一些SelectListItem类的实例集合(来自命名空间Microsoft.AspNetCore.Mvc.Rendering),其中包含文本和值属性。因此,您可以将Employees集合转换为所需的方式。Select(e => new SelectListItem)FullName, e.Id.ToString())),并将结果放到asp-items属性中。

在得到:

public IActionResult Create()
{
    ViewData["Tags"] = new SelectList(_context.Tags, "Id", "Name");
    return View();
}

在文章:

var selectedIds= Request.Form["Tags"];

视图:

<label>Tags</label>
<select  asp-for="Tags"  id="Tags" name="Tags" class="form-control" asp-items="ViewBag.Tags" multiple></select>

你可以使用下面的代码进行多重选择:

<select asp-for="EmployeeId"  multiple="multiple" asp-items="@ViewBag.Employees">
    <option>Please select</option>
</select>

你还可以使用:

<select id="EmployeeId" name="EmployeeId"  multiple="multiple" asp-items="@ViewBag.Employees">
    <option>Please select</option>
</select>

我下面的回答不能解决问题,但它与。

如果有人使用枚举而不是类模型,就像这个例子:

public enum Counter
{
    [Display(Name = "Number 1")]
    No1 = 1,
    [Display(Name = "Number 2")]
    No2 = 2,
    [Display(Name = "Number 3")]
    No3 = 3
}

和一个属性,在提交时获取值:

public int No { get; set; }

在razor页面中,您可以使用Html.GetEnumSelectList<Counter>()来获取enum属性。

<select asp-for="No" asp-items="@Html.GetEnumSelectList<Counter>()"></select>

它生成以下HTML:

<select id="No" name="No">
    <option value="1">Number 1</option>
    <option value="2">Number 2</option>
    <option value="3">Number 3</option>
</select>

你也可以使用IHtmlHelper.GetEnumSelectList。

    // Summary:
    //     Returns a select list for the given TEnum.
    //
    // Type parameters:
    //   TEnum:
    //     Type to generate a select list for.
    //
    // Returns:
    //     An System.Collections.Generic.IEnumerable`1 containing the select list for the
    //     given TEnum.
    //
    // Exceptions:
    //   T:System.ArgumentException:
    //     Thrown if TEnum is not an System.Enum or if it has a System.FlagsAttribute.
    IEnumerable<SelectListItem> GetEnumSelectList<TEnum>() where TEnum : struct;