- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 C# 和 .NET Framework 4.6.1 开发 ASP.NET MVC 5 应用程序。
我有这个 View
:
@model MyProject.Web.API.Models.AggregationLevelConfViewModel
[...]
@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, (SelectList)Model.HelperCodeTypeItems, new { id = "Configurations[0].HelperCodeType" })
ViewModel
是:
public class AggregationLevelConfViewModel
{
private readonly List<GenericIdNameType> codeTypes;
private readonly List<GenericIdNameType> helperCodeTypes;
public IEnumerable<SelectListItem> CodeTypeItems
{
get { return new SelectList(codeTypes, "Id", "Name"); }
}
public IEnumerable<SelectListItem> HelperCodeTypeItems
{
get { return new SelectList(helperCodeTypes, "Id", "Name"); }
}
public int ProductionOrderId { get; set; }
public string ProductionOrderName { get; set; }
public IList<Models.AggregationLevelConfiguration> Configurations { get; set; }
public AggregationLevelConfViewModel()
{
// Load CodeTypes to show it as a DropDownList
byte[] values = (byte[])Enum.GetValues(typeof(CodeTypes));
codeTypes = new List<GenericIdNameType>();
helperCodeTypes = new List<GenericIdNameType>();
for (int i = 0; i < values.Length; i++)
{
GenericIdNameType cType = new GenericIdNameType()
{
Id = values[i].ToString(),
Name = EnumHelper.GetDescription((CodeTypes)values[i])
};
if (((CodeTypes)values[i]) != CodeTypes.NotUsed)
codeTypes.Add(cType);
helperCodeTypes.Add(cType);
}
}
}
并且Models.AggregationLevelConfiguration
是:
public class AggregationLevelConfiguration
{
public byte AggregationLevelConfigurationId { get; set; }
public int ProductionOrderId { get; set; }
public string Name { get; set; }
public byte CodeType { get; set; }
public byte HelperCodeType { get; set; }
public int PkgRatio { get; set; }
public int RemainingCodes { get; set; }
}
我需要在这些属性中设置选定的值:
public IEnumerable<SelectListItem> CodeTypeItems
{
get { return new SelectList(codeTypes, "Id", "Name"); }
}
public IEnumerable<SelectListItem> HelperCodeTypeItems
{
get { return new SelectList(helperCodeTypes, "Id", "Name"); }
}
但我无法在 new SelectList(codeTypes, "Id", "Name");
或 new SelectList(helperCodeTypes, "Id", "Name"); 中设置它
因为所选值位于 Configurations
数组中:字段 AggregationLevelConfiguration.CodeType
和 AggregationLevelConfiguration.HelperCodeType
。
我想我必须在 View 中设置选定的值,但我不知道该怎么做。
如何设置选定的值?
最佳答案
不幸的是@Html.DropDownListFor()
在循环中渲染控件时,其行为与其他助手略有不同。这之前已被报告为 CodePlex 上的一个问题(不确定这是一个错误还是只是一个限制)
有 2 个选项可以解决此问题,以确保根据模型属性选择正确的选项
选项 1(使用 EditorTemplate
)
创建自定义EditorTemplate
对于集合中的类型。在/Views/Shared/EditorTemplates/AggregationLevelConfiguration.cshtml
中创建一个部分(注意名称必须与类型名称匹配
@model yourAssembly.AggregationLevelConfiguration
@Html.DropDownListFor(m => m.HelperCodeType, (SelectList)ViewData["CodeTypeItems"])
.... // other properties of AggregationLevelConfiguration
然后在主视图中,传递 SelectList
到EditorTemplate
如additionalViewData
@using (Html.BeginForm())
{
...
@Html.EditorFor(m => m.Configurations , new { CodeTypeItems = Model.CodeTypeItems })
...
选项 2(在每次迭代中生成新的 SelectList
并设置 selectedValue
)
在此选项中,您的属性(property) CodeTypeItems
应该是IEnumerable<GenericIdNameType>
,不是SelectList
(或者只是将 codeTypes
设为公共(public)属性(property))。然后在主视图中
@Html.DropDownListFor(m => m.Configurations[0].HelperCodeType, new SelectList(Model.CodeTypeItems, "Id", "Name", Model.Configurations[0].HelperCodeType)
旁注:无需使用new { id = "Configurations[0].HelperCodeType"
- DropDownListFor()
方法已经生成了 id
属性
关于c# - MVC5 Razor html.dropdownlistfor 当值在数组中时设置选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47916343/
我有一个 DropDownListFor 组件,它有一个从数据库获取值的读取操作。但是,我想根据另一个 DropDownListFor 的值过滤这些值。 这是具有过滤器值的 DropDownListF
我正在为语言生成一个下拉列表。我想将该列表的特定项目设为 selected。这是查看页面代码: @{var languageList = new List(); var cultures =
我有一个绑定(bind)到模型成员的 DropDownListFor 以及可供选择的项目列表。绑定(bind)到这个成员有效,但我似乎无法弄清楚的是如何在页面加载时显示模型的当前值。 查看 @Html
我已经看到许多关于 DropDownListFor 验证的类似问题和答案,但我还没有看到我的特定问题。 这是我的 html 助手。 VB: @Html.DropDownListFor(Function
我有一个带有 BootStrap 的 Html.DropDownListFor,它不像我表单中的 Html.TextBoxFor 那样左对齐。我试过“向左拉”和“向左文本”都没有运气。当我使用开发人员
我发誓我在尝试从静态状态列表填充 DropDownList 时遇到了麻烦。我更希望通过 EntityFramework 从数据库中预先填充此列表。 我的 RegisterViewModel publi
我在输入表单中有其他字段和下拉列表。他们都验证得很好。即使没有正确验证前端的两个元素仍然可以在帖子中正确地建模绑定(bind)。我不完全确定他们为什么不验证。这是设置: View 模型 public
我知道已经有很多类似的问题,但我花了几个小时试图解决这个问题,其他答案似乎都没有帮助! 我只想使用 MVC 在下拉列表中显示字符串列表。这真的有那么难吗?我没有“文本”和“值”分隔(尽管 MVC 似乎
我想在 HTML 助手中添加扩展方法来生成这样的选择和选项 Andorra United Arab Emirates Afghanistan 选项有一个数据域属性,我可以这样使用它 @Html.Dr
所以,我得到了一个在我看来看起来像这样的 DropdownListfor: @Html.DropDownListFor(m => m.ProductCategory, new SelectList(M
首先,我是 .NET MVC 的新手,虽然我以前使用过一般的 MVC 想法。我正在使用 .NET MVC4 和 CodeFirst 使用 Entity Framework 。 我正在尝试向“创建” V
我正在尝试将数据从我的数据库检索到 HTML,而不是检索到 Html.DropDownListFor,但我无法检索到标记。 NewCustomerViewModel public class
我有一个 departmentID 的下拉列表,它根据在 DepartmentCategoryID 中选择的内容进行填充,但是如果它留空,我将无法进行验证。它或所有其他的都有效,但这是以不同的方式完成
我想知道是否有人可以帮助我解决我面临的问题。我正在尝试使用 Razor 在 DropDownListFor 上创建搜索。 private List LoadStockitems() { Lis
我已经搜索了好几个小时并尝试了所有的建议。我想我缺少一些基本概念。我想使用模型而不是 ViewBag,并且我在回发的模型中设置了选定的项目/值。 我正在 cshtml 中设置一个 ddl 和 acti
这是我的 View 模型: public class EntityViewModel { [Required(ErrorMessage = "Title is required")]
我正在尝试填充 DropDownListFor数据库中的项目,但是当我尝试运行该程序时,它给了我错误 Object reference not set to an instance .就像方法(从数据
我有以下设置我的下拉菜单到荒谬的宽度: @Html.DropDownListFor(x => x.TypeId, new SelectList(Model.Type, "TypeId", "Ty
一直在尝试多种方法来更改 DropDownListFor 元素的样式。要么我做错了什么,要么有什么东西压倒了它。我已经尝试在 View 元素和 CSS 中更改它。但没有成功。 查看: @H
我显然在理解 JS 方面遇到了问题。我是新手,我正在尝试让它适用于以下用例: If "Healthcare" is selected from the "discipline" dropdown th
我是一名优秀的程序员,十分优秀!