栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

在ASP.NET Core MVC中选择标签助手

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在ASP.NET Core MVC中选择标签助手

使用选择标记帮助器呈现SELECt元素

在GET操作中,创建视图模型的对象,加载

EmployeeList
collection属性并将其发送到视图。

public IActionResult Create(){    var vm = new MyViewModel();    vm.EmployeesList = new List<Employee>    {        new Employee { Id = 1, FullName = "Shyju" },        new Employee { Id = 2, FullName = "Bryan" }    };    return View(vm);}

然后在您的创建视图中,

SelectList
EmployeeList
属性创建一个新对象,并将其作为该
asp-items
属性的值传递。

@model MyViewModel<form asp-controller="Home" asp-action="Create">    <select asp-for="EmployeeId"  asp-items="@(new SelectList(Model.EmployeesList,"Id","FullName"))">        <option>Please select one</option>    </select>    <input type="submit"/></form>

并且您的HttpPost操作方法接受提交的表单数据。

[HttpPost]public IActionResult Create(MyViewModel model){   //  check model.EmployeeId    //  to do : Save and redirect}

要么

如果您的视图模型具有

List<SelectListItem>
下拉列表项的属性作为属性。

public class MyViewModel{    public int EmployeeId { get; set; }    public string Comments { get; set; }    public List<SelectListItem> Employees { set; get; }}

然后采取行动

public IActionResult Create(){    var vm = new MyViewModel();    vm.Employees = new List<SelectListItem>    {        new SelectListItem {Text = "Shyju", Value = "1"},        new SelectListItem {Text = "Sean", Value = "2"}    };    return View(vm);}

并且在视图中,您可以直接将

Employees
属性用于
asp-items

@model MyViewModel<form asp-controller="Home" asp-action="Create">    <label>Comments</label>    <input type="text" asp-for="Comments"/>    <label>Lucky Employee</label>    <select asp-for="EmployeeId" asp-items="@Model.Employees" >        <option>Please select one</option>    </select>    <input type="submit"/></form>

该类

SelectListItem
属于
Microsoft.AspNet.Mvc.Rendering
名称空间。

确保对select元素使用显式结束标记。如果使用自动关闭标签方法,则标签助手将呈现一个空的SELECT元素!

以下方法 无效

<select asp-for="EmployeeId" asp-items="@Model.Employees" />

但这会起作用。

<select asp-for="EmployeeId" asp-items="@Model.Employees"></select>

使用实体框架从数据库表中获取数据

上面的示例将硬编码项目用作选项。所以我想我会添加一些示例代码来使用实体框架获取数据,因为很多人都在使用它。

假设您的DbContext对象具有一个名为的属性

Employees
,该类型的类型
DbSet<Employee>
Employee
实体类具有
Id
Name
属性的,例如

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

您可以使用LINQ查询来获取雇员,并在LINQ表达式中使用Select方法

SelectListItem
为每个雇员创建对象列表。

public IActionResult Create(){    var vm = new MyViewModel();    vm.Employees = context.Employees    .Select(a => new SelectListItem() {          Value = a.Id.ToString(),        Text = a.Name    })    .ToList();    return View(vm);}

假设

context
是您的数据库上下文对象。视图代码与上面相同。

使用SelectList

有些人喜欢使用

SelectList
类来保存呈现选项所需的项目。

public class MyViewModel{    public int EmployeeId { get; set; }    public SelectList Employees { set; get; }}

现在,在GET操作中,您可以使用

SelectList
构造函数填充
Employees
视图模型的属性。确保指定
dataValueField
dataTextField
参数。

public IActionResult Create(){    var vm = new MyViewModel();    vm.Employees = new SelectList(GetEmployees(),"Id","FirstName");    return View(vm);}public IEnumerable<Employee> GetEmployees(){    // hard pred list for demo.     // You may replace with real data from database to create Employee objects    return new List<Employee>    {        new Employee { Id = 1, FirstName = "Shyju" },        new Employee { Id = 2, FirstName = "Bryan" }    };}

在这里,我正在调用该

GetEmployees
方法来获取Employee对象的列表,每个对象都具有
Id
FirstName
属性,并且将这些属性用作
DataValueField
和创建
DataTextField
SelectList
对象。您可以将硬编码列表更改为从数据库表读取数据的代码。

视图代码将相同。

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

从字符串列表中呈现SELECT元素。

有时,您可能希望从字符串列表中呈现选择元素。在这种情况下,您可以使用

SelectList
构造函数
IEnumerable<T>

var vm = new MyViewModel();var items = new List<string> {"Monday", "Tuesday", "Wednesday"};vm.Employees = new SelectList(items);return View(vm);

视图代码将相同。

设置所选选项

有时,您可能希望将一个选项设置为SELECT元素中的默认选项(例如,在编辑屏幕中,您要加载先前保存的选项值)。为此,您可以简单地将

EmployeeId
属性值设置为要选择的选项的值。

public IActionResult Create(){    var vm = new MyViewModel();    vm.Employees = new List<SelectListItem>    {        new SelectListItem {Text = "Shyju", Value = "11"},        new SelectListItem {Text = "Tom", Value = "12"},        new SelectListItem {Text = "Jerry", Value = "13"}    };    vm.EmployeeId = 12;  // Here you set the value    return View(vm);}

呈现页面时,这将在select元素中选择Tom选项。

多选下拉菜单

如果要呈现多选下拉列表,则只需将用于视图属性的视图模型属性更改为

asp-for
数组类型。

public class MyViewModel{    public int[] EmployeeIds { get; set; }    public List<SelectListItem> Employees { set; get; }}

这将为具有

multiple
属性的select元素呈现HTML标记,该属性将允许用户选择多个选项。

@model MyViewModel<select id="EmployeeIds" multiple="multiple" name="EmployeeIds">    <option>Please select one</option>    <option value="1">Shyju</option>    <option value="2">Sean</option></select>

在多重选择中设置选定的选项

与单选类似,将

EmployeeIds
属性值设置为所需的值数组。

public IActionResult Create(){    var vm = new MyViewModel();    vm.Employees = new List<SelectListItem>    {        new SelectListItem {Text = "Shyju", Value = "11"},        new SelectListItem {Text = "Tom", Value = "12"},        new SelectListItem {Text = "Jerry", Value = "13"}    };    vm.EmployeeIds= new int[] { 12,13} ;      return View(vm);}

呈现页面时,这将在multi select元素中选择Tom和Jerry选项。

使用ViewBag传输项目列表

如果您不希望保留集合类型属性以将选项列表传递给视图,则可以使用动态ViewBag这样做。(
这不是我个人推荐的方法,因为Viewbag是动态的,并且您的代码容易被捕获错字

public IActionResult Create(){ViewBag.Employees = new List<SelectListItem>    {        new SelectListItem {Text = "Shyju", Value = "1"},        new SelectListItem {Text = "Sean", Value = "2"}    };    return View(new MyViewModel());}

并认为

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

使用ViewBag传输项目列表并设置所选选项

和上面一样。您所要做的就是将属性(您要为其绑定下拉列表的属性)值设置为要选择的选项的值。

public IActionResult Create(){ViewBag.Employees = new List<SelectListItem>    {        new SelectListItem {Text = "Shyju", Value = "1"},        new SelectListItem {Text = "Bryan", Value = "2"},        new SelectListItem {Text = "Sean", Value = "3"}    };    vm.EmployeeId = 2;  // This will set Bryan as selected    return View(new MyViewModel());}

并认为

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

分组项目

选择标记帮助器方法支持下拉菜单中的分组选项。您要做的就是在您的操作方法中指定

Group
每个属性的值
SelectListItem

public IActionResult Create(){    var vm = new MyViewModel();    var group1 = new SelectListGroup { Name = "Dev Team" };    var group2 = new SelectListGroup { Name = "QA Team" };    var employeeList = new List<SelectListItem>()    {        new SelectListItem() { Value = "1", Text = "Shyju", Group = group1 },        new SelectListItem() { Value = "2", Text = "Bryan", Group = group1 },        new SelectListItem() { Value = "3", Text = "Kevin", Group = group2 },        new SelectListItem() { Value = "4", Text = "Alex", Group = group2 }    };    vm.Employees = employeeList;    return View(vm);}

视图代码没有变化。select标记帮助器现在将在2个optgroup项目中呈现选项。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/442841.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号