【发布时间】: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