【发布时间】:2013-06-22 11:57:52
【问题描述】:
所以我有这个类可以让我检查是否选择了颜色:
public class Colors
{
public bool mIsSelected { get; set; }
public string mName { get; set; }
}
在将列表发送到视图之前,我使用以下值填充它:
public List<Colors> mListColors = new List<Colors>();
mListColors.Add(new Colors{ mIsSelected = false, mName = "black"});
mListColors.Add(new Colors { mIsSelected = false, mName = "blue" });
mListColors.Add(new Colors { mIsSelected = false, mName = "white" });
mListColors.Add(new Colors { mIsSelected = false, mName = "red" });
mListColors.Add(new Colors { mIsSelected = false, mName = "green" });
在我看来,我是这样渲染它们的:
@for (int i = 0; i < Model.mListColors.Count; i++)
{
var item = Model.mListColors[i];
switch (item.mName)
{
case "black":
@Html.Image("~\\Images\\Functional\\blackColor.jpeg", item.mName.ToUpper(), null)
@Html.CheckBoxFor(_item => Model.mListColors[i].mIsSelected, item.mIsSelected)
@Html.HiddenFor(_item => _item.mListColors[i].mName)
break;
case "blue":
@Html.Image("~\\Images\\Functional\\blueColor.jpeg", item.mName.ToUpper(), null)
@Html.CheckBoxFor(_item => Model.mListColors[i].mIsSelected, item.mIsSelected)
@Html.HiddenFor(_item => _item.mListColors[i].mName)
break;
case "red":
@Html.Image("~\\Images\\Functional\\redColor.jpeg", item.mName.ToUpper(), null)
@Html.CheckBoxFor(_item => Model.mListColors[i].mIsSelected, item.mIsSelected)
@Html.HiddenFor(_item => _item.mListColors[i].mName)
break;
case "green":
@Html.Image("~\\Images\\Functional\\greenColor.jpeg", item.mName.ToUpper(), null)
@Html.CheckBoxFor(_item => Model.mListColors[i].mIsSelected, item.mIsSelected)
@Html.HiddenFor(_item => _item.mListColors[i].mName)
break;
case "white":
@Html.Image("~\\Images\\Functional\\whiteColor.jpeg", item.mName.ToUpper(), null)
@Html.CheckBoxFor(_item => Model.mListColors[i].mIsSelected, item.mIsSelected)
@Html.HiddenFor(_item => _item.mListColors[i].mName)
break;
}
}
这样我就可以有一个复选框并将值设置为 true 或 false,具体取决于复选框是否被选中。 HtmlImage 是一个自定义助手,它允许我显示图像。
但无论是否选中该框,控制器中的值始终为 false,那么我该怎么做才能更正呢?
【问题讨论】:
-
是否有任何代码可以让复选框更改字典的值?
-
嗯,好吧,我认为渲染视图会解决这个问题,不是吗?这不是
Html.CheckBoxFor助手的目的吗? -
您专门将
mBlackColormBlueColor的值分配给false。我没有看到任何未设置的代码false -
你真的不需要那个开关。您可以通过这种方式删除大量代码。当你说“控制器中的值总是假的”时,你在哪里检查?
-
关于开关的好点,我只是想让事情正常进行。然后我签入我的控制器,在我的回发方法中,我得到了包含
List<Colors>的模型。
标签: c# asp.net-mvc razor checkbox