返回由指定表达式表示的对象中每个属性的HTML select元素。
如何将 IEnumerable<SelectListItem> 集合传递到 MVC 部分视图,每个请求仅进行一次数据库查找
假设给定一个 html 表的部分视图,每个表行都存在一个嵌套的部分视图,如下所示: 外部局部视图 <... 假设给定 html 表的部分视图,每个表行都存在一个嵌套的部分视图,如下所示: 外部局部视图 <table> <thead> <tr> <th>Item Name</th> <th>Cost</th> <th>Category</th> </tr> </thead> <tbody> @for (int i = 0; i < Model.PurchaseItems.Count; i++) { @Html.Partial("_PurchaseItemsDetail", Model.PurchaseItems[i]) } </tbody> </table> 内部部分视图,注意:外部视图可以在单个请求中多次使用此部分视图,但是如果使用 AJAX 请求,也可以仅使用一次 <tr id="@Model.ID"> <td>@Html.TextBoxFor(x => x.ItemName)</td> <td>@Html.TextBoxFor(x => x.Cost)</td> <td> @Html.DropDownListFor(x => x.Category, CATEGORY_COLLECTION) </td> </tr> 问题:考虑到这个旨在灵活的内部视图,查询数据库并临时存储要与下拉列表一起使用的IEnumerable<SelectListItem>集合的最佳方法是什么? 我能想到的方法: 方法一:这看起来是最简单的,但是感觉违反了MVC原则。 在内部部分视图中求值并存储在 ViewData 集合中,这样数据库只被命中一次: @{ if (ViewData["Categories"] == null) { ViewData["Categories"] = API.GetCategories(); } } 然后在视图中 <td> @Html.DropDownListFor(x => x.Category, ViewData["Categories"]) </td> 这很好,因为视图会自行决定如何填充其包含的下拉列表。它不依赖于视图模型。 方法2:与上面相同,只是在返回内部局部视图的各种控制器方法中设置ViewData。 这种方式似乎更符合 MVC 最佳实践,但维护起来似乎更加乏味和混乱,因为每个控制器方法都需要正确设置 ViewData,并创建必要的视图模型。 方法三:这个看起来最费工,最难维护,但是最符合MVC原则。完全避免使用 ViewData,而是将集合的引用与部分视图模型中的其他属性一起存储。控制器负责创建集合,然后在每个表行的视图模型中存储引用。 public class PurchaseItemModel { public string ItemName { get; set; } public decimal Cost { get; set; } public string Category { get; set; } // add this public IEnumerable<SelectListItem> Categories { get; set; } } 在每个提供内部视图的控制器中 // if dealing with multiple rows (GET) IEnumerable<SelectListItem> collection = API.GetPurchaseItemList(); foreach (PurchaseItemModel pim in OuterModel.PurchaseItemModels) { pim.Categories = collection; } 或 // if dealing with a single row (Ajax) purchaseItem.Categories = API.GetPurchaseItemList(); 然后在视图中 <td> @Html.DropDownListFor(x => x.Category, x.Categories) </td> 也许这只是主观问题,但似乎对于这种情况有一个最佳实践。 有什么想法吗? 继续创建一个视图模型类,例如: public class PurchaseItemViewModel { public string ItemName { get; set; } public decimal Cost { get; set; } public string Category { get; set; } public IEnumerable<Category> Categories { get; set; } public PurchaseItemViewModel(PurchaseItemModel item, List<Category> categories) { // initialize item and categories } } 在控制器中获取所有项目,然后获取所有类别,然后将 Purchase 项目设置到视图模型并设置类别。因此,您将把视图模型类传递给视图。 方法 3 是可行的方法 - 但不要让它变得如此复杂。 有两个属性 - PurchaseItem 属性和 Categories 属性。 然后实例化每次迭代并设置属性。 松散示例: <table> <thead> <tr> <th>Item Name</th> <th>Cost</th> <th>Category</th> </tr> </thead> <tbody> @for (int i = 0; i < Model.PurchaseItems.Count; i++) { var vm = new PurchaseItemsDetailViewModel() { PurchaseItem = Model.PurchaseItems[i], Categories = Model.CategoriesSelectList // or whatever holds the categories select list }; @Html.Partial("_PurchaseItemsDetail", vm) } </tbody> </table> <tr id="@Model.PurchaseItem.ID"> <td>@Html.TextBoxFor(x => x.PurchaseItem.ItemName)</td> <td>@Html.TextBoxFor(x => x.PurchaseItem.Cost)</td> <td> @Html.DropDownListFor(x => x.PurchaseItem.Category, x.Categories) </td> </tr>
我有一个链接到 SQL 表的下拉列表。该表没有空行,因此当我加载下拉列表时,它显示 SQL 表中的第一个条目。我需要第一次进入博士...
DropDownListFor 所选值在 ASP.Net Core MVC 中表单 POST 的 Enum 属性模型中返回 null
我有一个带有 DropDownlistFor 的表单页面或选择如下: I have a form page with DropDownlistFor or select as below: <select asp-for="LeaveType" class="form-control" style="max-width:180px" asp-items="@Html.GetEnumOcp_SelectList<LeaveType>(LeaveType.List, null)"> <option selected="selected" value="">Please select</option> </select> 我有一个具有以下属性的 viewModel: public LeaveType LeaveType { get; set; } 这是我的枚举模型: public class LeaveType(int value, string name) : Enumeration<LeaveType>(value, name) { public static readonly LeaveType AnnualLeave = new(1, "AnnualLeave"); public static readonly LeaveType SickLeave = new(2, "SickLeave"); public static readonly LeaveType CompassionateLeave = new(3, "CompassionateLeave"); public static readonly LeaveType UnpaidLeave = new(4, "UnpaidLeave"); } 我有 htmlExtension : public static IEnumerable<SelectListItem> GetEnumOcp_SelectList<TEnum>(this IHtmlHelper html, IReadOnlyCollection<TEnum> isValueUsedForValue, TEnum? selectedValue) where TEnum : LeaveType { return isValueUsedForValue.Select(eachValue => new SelectListItem { Text = eachValue.Name, Value = eachValue.Value.ToString(), Selected = eachValue.Equals(selectedValue) }).ToList(); } 在 Index HttpGet 操作中,我期望 LeaveTypes 值,但是 当我使用 DropDownList 或 Select 将我的 from (ViewModel) 发布到控制器时,我拥有除 LeaveType 属性值为 null 之外的所有值。请注意,我的枚举(LeaveType)不是类的结构类型。 [HttpPost] [ValidateAntiForgeryToken] public async Task<IActionResult> Index(LeaveViewModel model) { if (model == null) return NotFound(); if (!ModelState.IsValid) { return View(model); } return RedirectToAction(nameof(Index)); } 有人知道为什么 LeaveType 属性从端点到视图模型获取空值吗? 谢谢 尝试将它们作为 SelectList 返回 public static SelectList GetEnumOcp_SelectList<TEnum>(this IHtmlHelper html, IReadOnlyCollection<TEnum> isValueUsedForValue, TEnum? selectedValue) where TEnum : LeaveType { var myList = isValueUsedForValue.Select(eachValue => new SelectListItem { Text = eachValue.Name, Value = eachValue.Value.ToString(), Selected = eachValue.Equals(selectedValue) }).ToList(); return New SelectList(myList, "Value", "Text"); }
通过Excel VBA,在使用数据验证创建的多选下拉列表中添加“无”选项
在亲爱的@Taller的帮助下,下面的代码为通过数据验证创建的多选下拉列表中的每个选项的首次亮相添加了复选标记。然而,我收到了经理的反馈/批评
使用 cypress 完成某些操作后,如何从值列表中选择每个下拉值?
cy.get('#gradeLevels').each(($option) => { const optionText = $option.text(); cy.get('#gradeLevels').select('三年级'); cy.log('年级列表'+ optionText) }) 我正在尝试...
有时会根据搜索结果填充此下拉列表。填充字段时,需要将其禁用,以便无法更改选择。但是当页面加载时......
从 PostgreSQL 在 PHP 中填充一个简单的列表框
我是 PHP 新手;但是,我知道动态列表通常如何在其他平台上工作。 我知道 pg_query 及其 API 的兄弟成员是如何工作的……有点。 我没有任何运行,但是......只是
如何在 ASP.NET Core MVC 中设置 Html.DropDownList 的值
我正在编辑表单,我无法根据模型值设置 Html.DropDownList 中显示的值。 这是我到目前为止所拥有的: @Html.DropDownList("OrgId", ...
我发现很多帖子都是关于同样的问题,但没有一个是关于视图数据和连接到存储库的。我需要只使用一个类,而不是单独的国家和性别类, ...
我如何使用实体框架6数据库优先方法绑定DropDownList
[当我尝试用我的DropDownList加载页面时,出现错误“传递到字典中的模型项的类型为'System.Web.Mvc.SelectList',但此字典需要的模型项为...
ASP .NET MVC-DropDownList OnChange
当我在dropdownList中选择一个值时,我想隐藏一些数据。示例:当我选择性别= M时,我不想在标题中看到:先生先生或小姐。这是我的代码:@Html ....
@@ Html.DropDownListFor Size(或)样式不起作用
@@ Html.DropDownListFor(a => a.DSelected,Model.DList,new {@class =“ mdb-select colorful-select dropdown-primary”,@style =“ height:35px;”,@ size =“ 2 “})为什么没有height或size属性...
我正在尝试从drowpdownlist中选择多个项目,我正在使用引导程序,但是我的问题是:我只能获得第一个选定的项目,而不能让其他选定的项目。我的代码(样式和...
我建立在C#中的视觉工作室网页的应用程序。我有在C#项目“soporte \安德烈斯”一个DropDownList,但是当我把这个值我有“soporte \安德烈斯”这是什么形象?
Asp.Net Core Razor Pages DropDownList选择的项目值
我是Asp.Net Core Razor Pages的新手。这是我关于Stack Overflow的第一个问题。当从创建作业页面上的下拉列表中选择客户端时,我希望从...接收客户端详细信息
我想禁用ItemList的某些成员。我尝试过以下代码的变体,但似乎没有任何效果。我希望将残疾人物品保留在清单中,但要灰色......
在ASP.net MVC 5项目上工作。我有一个员工姓名下拉列表。我需要添加搜索输入字段,以便用户可以通过输入员工ID来搜索员工。我可以看到解决方案......
如何将新属性设置为@ Html.DropDownListFor
我正在尝试向DropDownListFor添加特定属性(data-toggle =“select”)。当我使用:@ Html.DropDownListFor(model,myList,“Select ..”,new {@class =“form-control”,@ data-toggle =“select”...
在asp.net mvc中的下拉列表选择中的视图中动态填充模型字段
我在ASP.NET MVC应用程序中有一个视图,带有下拉列表和其他文本字段。下拉列表中填充了特定目录中的文件名。因此,在选择特定文件名时......
将DropdownList属性绑定到ASP.NET Core中的控制器方法
我正在尝试获取特定模型对象的创建视图的下拉列表。在这种情况下,有问题的模型是Department,在该对象中,还有另一个模型对象......