设置对象的值';s列表中的布尔值为true
本文关键字:列表 布尔值 true 对象 设置 | 更新日期: 2023-09-27 18:20:01
所以我有这个类,可以检查是否选择了颜色:
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。看这里:
// Assign the result of a boolean expression to b.
b = (days % 2 == 0);
根据Jason Evans的建议,您还可以重构代码,这样您就不会违反DRY
@for(int idx = 0;idx < Model.ListColors.Count;idx++)
{
var item = Model.ListColors[idx]
@Html.Image(string.Format(
"~''Images''Functional''{0}Color.jpeg",
item.Name.ToLower()), item.Name, null)
@Html.CheckBoxFor(model => Model[idx].IsSelected, item.IsSelected)
@Html.HiddenFor(model => Model[idk].Name)
}
更新
您可能需要考虑创建一个更准确地反映您的数据的模型:
public class Colors
{
public bool IsSelected {get;set;}
public string Name {get;set;}
}
并将您的模型暴露为:
@model IEnumerable<Colors>
如果我又错了,请投反对票,但不应该是Value
吗?
@Html.CheckBoxFor(_item => color.Value, Model.mListColors["Blue"].Value)