- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这段代码:
Html.CheckBoxList(ViewData.TemplateInfo.HtmlFieldPrefix, myList)
产生这个标记:
<ul><li><input name="Header.h_dist_cd" type="checkbox" value="BD" />
<span>BD - Dist BD Name</span></li>
<li><input name="Header.h_dist_cd" type="checkbox" value="SS" />
<span>SS - Dist SS Name</span></li>
<li><input name="Header.h_dist_cd" type="checkbox" value="DS" />
<span>DS - Dist DS Name</span></li>
<li><input name="Header.h_dist_cd" type="checkbox" value="SW" />
<span>SW - Dist SW Name </span></li>
</ul>
您可以检查多个选择。返回字符串参数 Header.h_dist_cd
仅包含所选的第一个值。我需要做什么才能获得其他选中的值?
post 方法参数如下所示:
public ActionResult Edit(Header header)
最佳答案
我假设 Html.CheckBoxList 是您的扩展并且是您生成的标记。
根据您展示的内容,需要检查两件事:
也是个问题,但您想使用“label for =”...”,这样他们就可以单击文本来选中/取消选中并实现可访问性。
我发现使用扩展来解决这个问题很容易出错。您可能需要考虑使用 subview 模型。更适合MVC2的EditorFor模板系统。
这是我们系统的一个例子...
在 View 模型中,嵌入一个可重用的子模型...
[AtLeastOneRequired(ErrorMessage = "(required)")]
public MultiSelectModel Cofamilies { get; set; }
您可以使用标准的 SelectListItem 列表对其进行初始化...
MyViewModel(...)
{
List<SelectListItem> initialSelections = ...from controller or domain layer...;
Cofamilies = new MultiSelectModel(initialSelections);
...
MultiSelectModel 子模型。注意 Value 上的 setter 覆盖...
public class MultiSelectModel : ICountable
{
public MultiSelectModel(IEnumerable<SelectListItem> items)
{
Items = new List<SelectListItem>(items);
_value = new List<string>(Items.Count);
}
public int Count { get { return Items.Count(x => x.Selected); } }
public List<SelectListItem> Items { get; private set; }
private void _Select()
{
for (int i = 0; i < Items.Count; i++)
Items[i].Selected = Value[i] != "false";
}
public List<SelectListItem> SelectedItems
{
get { return Items.Where(x => x.Selected).ToList(); }
}
private void _SetSelectedValues(IEnumerable<string> values)
{
foreach (var item in Items)
{
var tmp = item;
item.Selected = values.Any(x => x == tmp.Value);
}
}
public List<string> SelectedValues
{
get { return SelectedItems.Select(x => x.Value).ToList(); }
set { _SetSelectedValues(value); }
}
public List<string> Value
{
get { return _value; }
set { _value = value; _Select(); }
}
private List<string> _value;
}
现在您可以将编辑器模板放在 Views/Shared/MultiSelectModel.ascx...
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<WebUI.Cofamilies.Models.Shared.MultiSelectModel>" %>
<div class="set">
<%=Html.LabelFor(model => model)%>
<ul>
<% for (int i = 0; i < Model.Items.Count; i++)
{
var item = Model.Items[i];
string name = ViewData.ModelMetadata.PropertyName + ".Value[" + i + "]";
string id = ViewData.ModelMetadata.PropertyName + "_Value[" + i + "]";
string selected = item.Selected ? "checked=\"checked\"" : "";
%>
<li>
<input type="checkbox" name="<%= name %>" id="<%= id %>" <%= selected %> value="true" />
<label for="<%= id %>"><%= item.Text %></label>
<input type="hidden" name="<%= name %>" value="false" />
</li>
<% } %>
</ul>
<%= Html.ValidationMessageFor(model => model) %>
这种方法的两个优点:
您不必将项目列表与选择值分开处理。您可以将属性放在单个属性上(例如,AtLeastOneRequired 是我们系统中的自定义属性)
您将模型和 View (编辑器模板)分开。例如,我们有复选框的水平和垂直布局。您还可以将“多选”呈现为带有前后按钮、多选列表框等的两个列表框。
关于templates - CheckBoxList 多选 : how to model bind back and get all selections?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3369533/
将项目从一个 CheckBoxList 添加到另一个 CheckBoxList 如何使用 asp.net 检查该项目是否已存在于第二个 CheckBoxList 中C# 我编写的用于在 CheckBo
我使用 C# 生成了一个包含多个项目的 CheckBoxList。现在我想设置 CheckBoxList 中允许的最大选中项数。如果用户检查的项目超过允许的最大数量,则会出现警报或自动取消选中其他项目
我提交了表单并收到了一封说明表单结果的电子邮件,在这种情况下,如果选中了三个复选框中的任何一个,就会显示结果。我当前的问题是,如果选中了一个以上的复选框,它不会显示选中第二个或第三个复选框。 示例:我
以下是我将复选框动态添加到 CheckBoxList 的代码: foreach (WCore.CategoryFields cat in Global.getCategories()) {
我正在实现一个checkboxlist,如果任何项目被选中\未选中,无论是哪一个,我都想发起一个事件。如何做到这一点,请帮助。 最佳答案 根据 MSDN void Index_Changed(Obj
我的 checkBoxList 包含月份数,当用户单击“检查所有我有此 HTML”时,我需要检查此列表中的所有项目:
我正在寻找 CheckBoxList 的 CSS 代码以在元素之间添加线条。有人可以帮助我如何在 CheckBoxList 的元素之间添加分界线吗? 下面是我正在查看的格式的示例图像。 下面是我为 C
我在页面上有一个CheckBoxList。页面上的所有控件均位于 UpdatePanel 中。 使用 JavaScript 单击 anchor 标记时向其添加项目。 functio
有谁知道如何在一行中清除CheckBoxList? 我有一个包含数百个值的 CheckBoxList,我只是想加快代码的速度。 即无需像这样遍历每个复选框: foreach (ListItem li
我有一个包含一些项目的 CheckBoxList,当用户单击一个按钮时,我希望将选中的文本框的值添加到一个字符串中。我在这里到处寻找答案,但大多数都不起作用或产生不良结果。这是我到目前为止的代码: s
假设我有下表: 和以下 CheckBoxList: 在代码隐藏中,我按如下方式填充它: MyCheckBoxList.DataSource = from c in EMPLOYEE
我正在努力寻找问题的解决方案,我花了相当多的时间尝试其他解决方案但无济于事。任何帮助或解释将不胜感激。 我有一个 SQL 数据库,其中有一个名为“categories”的字符串字段,其中包含由“,”分
嘿,我遇到了这个非常烦人的问题:我有一个 CheckBoxList 从数据源获取项目及其值和所有内容。我需要的是在选中值为“33”的项目时显示一些面板。所以我需要获取单击的项目、上次单击的内容或其他内
我有 Checkboxlist,但无法为其提供必需的字段验证器或自定义验证器。 它给了我运行时异常。 语言:Vb.net 和 asp.net 最佳答案 使用 jQuery 和 ASP.Net Cust
海 是否可以使用这种形式的复选框列表: 提前致谢。 最佳答案 只需设置重复方向。 RepeatDirection="Horizontal" 关于asp.net - CheckBoxList 水平,我们
我试图只允许用户从可能有 12 个选项的复选框列表中选择 5 个选项。我已添加此代码,但用户可以根据自己的意愿进行选择。 这是我的完整语法。 为什么这没有按照我的意愿发出警报?
我有一个似乎加载并正确执行所有操作的 CheckboxList,除了当我执行回发时,它不会设置 Item.Selected 属性。我为整个页面禁用了 View 状态。 我这样加载它(在每次加载时都在
我有一个带复选框的列表框,当事件结束时,我需要取消选中每个复选框。 这是我的 xaml,但在代码中如何清除此值?谢谢
我在 ASP.NET 中使用 CheckBoxList 应用程序: 我想在单击按钮后更改所选元素的样式。为此,我有 JavaScript 功能: function c
下面是我的复选框列表。文本显示在复选框下方。 如何将文本排成一行?这是我的查看源代码 02. Form of product order/purchase (POS with
我是一名优秀的程序员,十分优秀!