2013-06-25 3 views
1

Так что у меня этот класс, который позволяет мне проверить, если цвет был выбран или нет:Установка значения булева объекта в списке истинного

public class Colors 
{ 
    public bool mIsSelected { get; set; } 
    public string mName { get; set; } 
} 

Перед отправкой списка к просмотру, I заполнить его с этими значениями:

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 - это специальный помощник, который позволяет мне отображать изображение.

Но значение в контроллере всегда неверно, несмотря на то, что флажок установлен или нет, так что я могу сделать, чтобы исправить это?

+0

Есть ли какой-либо код, где флажок изменяет значение в словаре? – Alexander

+0

Хмм, ну, я думал, что сделанное представление позаботится об этом, нет? Разве это не цель помощника «Html.CheckBoxFor»? – hsim

+0

Вы специально присвоили значение 'mBlackColor'' mBlueColor' 'false. Я не вижу никакого кода, где его не установлено ot 'false' –

ответ

0

Ваш синтаксис немного выключен, вы устанавливаете все значения в false. Смотри here:

// Assign the result of a boolean expression to b. 
b = (days % 2 == 0); 
+0

Ну, мне нужно установить их в false при запуске, потому что в другом представлении, если бы я не продолжал так, он бы разбился. Или это бесполезно? И я не уверен, почему вы используете modulo для их установки? – hsim

+0

Модуль - это всего лишь пример, взятый из ссылки Microsoft. Вы используете 'a = b = c', когда это должно быть' a = (b == c) '. Но если ваше намерение состояло в том, чтобы изначально установить их всех на ложные, я неправильно понял и извинился. – Alexander

0

здание от того, что Джейсон Эванс предлагает Вам также может реорганизовать код, чтобы вы не нарушая 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) 
} 

Update

Вы можете рассмотреть вопрос о создании модели что более точно отражает ваши данные:

public class Colors 
{ 
    public bool IsSelected {get;set;} 
    public string Name {get;set;} 
} 

и выставить свою модель:

@model IEnumerable<Colors> 
+0

Тем не менее, я не могу получить доступ к 'Model.ListColors [idx]', потому что мой словарь - это строка, а не int. Кажется, что цикл 'for' не может проходить через« Словарь <строка, bool> '? – hsim

+0

Возможно, вы можете изменить свою модель, чтобы она больше отражала данные, с которыми вы работаете, а затем раскрывайте их как список, а не словарь. – Jay

+0

Ну, это правда, что я мог только сосредоточиться на цветах и ​​проверить, назван ли этот цвет в модели таким образом. Хороший совет, я попробую этот подход. – hsim

0

Если я снова ошибся, пожалуйста downvote, но это не должно быть с Value?

@Html.CheckBoxFor(_item => color.Value, Model.mListColors["Blue"].Value)

+0

Нет нисходящего от меня, но я пробовал этот подход, и это ничего не меняет. Я сейчас пытаюсь применить метод Джей , – hsim

Смежные вопросы