【问题标题】:MVC get collection of checkboxes when some are not checked未选中某些复选框时,MVC 获取复选框集合
【发布时间】:2018-02-28 03:24:46
【问题描述】:

我有一个要提交的表单,它有多个复选框。该表单是用户定义的,因此它必须能够适应任何大小。我有一个我正在使用的“插件”集合。该表单在复选框中显示插件,每个插件有 4 个选项。他们可以在每个插件上选择一个选项(jQuery 限制选择一个复选框),但没有一个是必需的。

我遇到的问题是,当他们提交表单时,如果第一个复选框没有选中的选项,其余的都没有通过,因为它出现在列表/集合中如何使这些复选框成为可选并将数据传递给我的控制器?

<h1>Pick Your Extras To Make It More Special</h1>
<fieldset>
    <ul>
        <li>Extra <br /><img src="UPS_30484.jpg" /></li>
        <li><label>One <br /> $1.25<br /> <input type="checkbox" name="Addons[0]" value="1" class="addon-checkboxes"></label></li>
        <li><label>Two <br /> $2.50<br /> <input type="checkbox" name="Addons[0]" value="2" class="addon-checkboxes"></label></li>
        <li><label>Tree <br /> $3.00<br /> <input type="checkbox" name="Addons[0]" value="3" class="addon-checkboxes"></label></li>
        <li><label>Four <br /> $4.00<br /> <input type="checkbox" name="Addons[0]" value="4" class="addon-checkboxes"></label></li>
   </ul>
</fieldset>
<fieldset>
   <ul>
        <li>Extra 2 <br /><img src="UPS_30484.jpg" /></li>
        <li><label>One <br /> $2.50<br /> <input type="checkbox" name="Addons[1]" value="5" class="addon-checkboxes"></label></li>
        <li><label>Two <br /> $5.00<br /> <input type="checkbox" name="Addons[1]" value="6" class="addon-checkboxes"></label></li>
        <li><label>Three <br /> $7.50<br /> <input type="checkbox" name="Addons[1]" value="7" class="addon-checkboxes"></label></li>
        <li><label>Four <br /> $10.00<br /> <input type="checkbox" name="Addons[1]" value="8" class="addon-checkboxes"></label></li>
   </ul>
</fieldset>
<fieldset>
    <ul>
        <li>Candy  <br /><img src="30484.jpg" /></li>
        <li><label>Small<br /> $5.00<br /> <input type="checkbox" name="Addons[2]" value="13" class="addon-checkboxes"></label></li>
        <li><label>Medium<br /> $10.00<br /> <input type="checkbox" name="Addons[2]" value="14" class="addon-checkboxes"></label></li>
        <li><label>Large<br /> $15.00<br /> <input type="checkbox" name="Addons[2]" value="15" class="addon-checkboxes"></label></li>
        <li><label>Bucket<br /> $20.00<br /> <input type="checkbox" name="Addons[2]" value="16" class="addon-checkboxes"></label></li>
   </ul>
</fieldset>

每个值都代表数据库中的价格,该价格具有插件产品的外键。所以我得到了一个插件列表,但是当Addons[0] 没有选择某些东西时,Addons[1]Addons[2] 也不会提交。如果选择了所有值,则这些值确实会传递给控制器​​,但我需要这些是可选的。

提交时的视图模型:

public class ProductToCartViewModel : BaseObject
  {
    [Required]
    public int Price { get; set; }
    public int[] Addons { get; set; }
    public string DeliveryZipCode { get; set; }
    public DateTime DeliveryDate { get; set; }
    public ApplicationUser User { get; set; }
  }

【问题讨论】:

  • 使用单选按钮——它们的设计目的是什么,每个“组”可以有一个默认的 `null` 或 0 选项。或者更好的是正确设计您的视图模型以表示您想要在视图中显示的内容并使用强类型 HtmlHelper 方法绑定到您的模型
  • 使用单选按钮,一旦用户选择了一个输入,他们就无法取消选择它们。因为这些是可选的,所以我需要用户能够切换插件的选择。因此,如果有 4 个插件,每个插件都有 4 个选项可供选择。我还有一个问题是插件不会是我能够强输入的东西。因为每个产品都有不同的插件,用户决定这些插件是什么。所以我有一个插件对象,他们可以根据需要向产品添加任意数量的插件。因此,一种产品可能有 2 个插件,而一种产品可能有 10 个。
  • 拥有 100 个插件对象的产品是没有意义的,这只是浪费了实体中的数据库列。
  • 然后有一个带有null 值的附加单选按钮。当然,您可以将其设为强类型('Addons 的集合)
  • 你是什么意思在实体中浪费了数据库列 - 它是一个集合,所以它是一个单独的数据库表,而不是主表中的列。

标签: c# asp.net-mvc asp.net-mvc-4


【解决方案1】:

如果用户只能从 4 个选项中选择一个选项,我认为您应该使用单选而不是复选框。当您说“如果第一个复选框没有选中选项”时,您是指每 4 个插件选项的第一个复选框吗?还是来自 3 个 Extras 的组?

【讨论】:

  • 我最初有单选按钮,但由于一旦用户选择了插件,这些都是可选的,他们无法取消选择它。因此,我将切换功能切换到复选框,并使用jQuery i取消选中组中的所有其他选中。因此,如果有 4 个插件,每个插件最多可以有 4 个选项可供选择。因此他们可以从每个分配的插件中选择 1 个选项。但他们也可以选择无。如果他们没有从视图中为该组名称传递 null 的组中选择复选框,我需要一些方法,否则它会弄乱数组并且没有发送数据
  • 如果您需要用户取消选中单选按钮,请参考此答案stackoverflow.com/questions/10876953/…。通过按住 ctrl 并单击选中的单选按钮,它可以很好地工作
猜你喜欢
  • 1970-01-01
  • 2016-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-06
  • 1970-01-01
  • 2017-04-03
  • 1970-01-01
相关资源
最近更新 更多