Я сейчас редактирую пользовательский объект со словарем Dictionary<MyOtherObject,Boolean>
.
public class MyObject{
public int SomeProperties{get;set;}
public int SomeMoreProperties{get;set;}
....
public Dictionary<MyOtherObject, Boolean> Attributions{get;set;}
}
Цель состоит в том, чтобы я мог иметь список флажков для каждого элемента в словаре и решить, проверять его или нет.
Я пытался создать и отредактировать шаблон для моего свойства "Attribution". Он отображает отлично, принимая во внимание, какие значения были выбраны. Но когда я отправляю, я получаю ноль для словаря.
Так, что хороший способ сделать это?
Я нашел этот пост переполнения стека , в котором почти та же проблема, вместо этого у меня есть словарь, а не простые свойства. Насколько хорошо MVC справляется с ними?
Я могу преобразовать свои данные, но я не вижу способа не иметь «Список» элемента. Также найдено это но ответов нет
EDIT
Мой коллега сделал несколько попыток, начав отображать только список bool вместо списка объектов:
С объектом
public class TheViewObject{
//other fields
List<bool> MyList{get;set;}
}
В представлении, если мы сгенерируем форму с @Html.EditorFor(m=>m.MyList)
, мы получим это:
<input checked="checked" class="check-box" data-val="true" data-val-required="The Boolean field is required." id="MyList_0_" name="MyList[0]" value="true" type="checkbox">
<input class="check-box" data-val="true" data-val-required="The Boolean field is required." id="MyList_1_" name="MyList[1]" value="true" type="checkbox">
<input checked="checked" class="check-box" data-val="true" data-val-required="The Boolean field is required." id="MyList_2_" name="MyList[2]" value="true" type="checkbox">
<input name="MyList[0]" value="false" type="hidden"><input name="MyList[1]" value="false" type="hidden"><input name="MyList[2]" value="false" type="hidden">
Это работает, потому что он знает, как обращаться с List<bool>
. Этот код работает, и мы получаем правильные данные в форме возврата.
Теперь, если у нас есть шаблон
@model List<bool>
@for (int i = 0; i < Model.Count; i++) {
@Html.EditorFor(x => Model[i])
}
И результат:
<input checked="checked" class="check-box" data-val="true" data-val-required="The Boolean field is required." id="MyList__0_" name="MyList.[0]" value="true" type="checkbox">
<input name="MyList.[0]" value="false" type="hidden">
<input class="check-box" data-val="true" data-val-required="The Boolean field is required." id="MyList__1_" name="MyList.[1]" value="true" type="checkbox">
<input name="MyList.[1]" value="false" type="hidden">
<input checked="checked" class="check-box" data-val="true" data-val-required="The Boolean field is required." id="MyList__2_" name="MyList.[2]" value="true" type="checkbox">
<input name="MyList.[2]" value="false" type="hidden"> </td>
Результат в основном тот же, ЗА ИСКЛЮЧЕНИЕМ, что у нас есть дополнительное "." между MyList и [x]. С этим синтаксом связыватель модели не может понять, как связать объект.
Я думаю, что это в основном то, что происходит с нашим Словарём раньше (мы протестировали со списком, та же проблема)
(сейчас я тестирую beginollectionitem Стива Сандерсона )