В ASP.NET MVC флажок HtmlHelper генерируется здесь:
<%= Html.CheckBox("List_" + mailingList.Key, true) %>
как этот HTML:
<input id="List_NEW_PRODUCTS" name="List_NEW_PRODUCTS" type="checkbox" value="true" />
<input name="List_NEW_PRODUCTS" type="hidden" value="false" />
В случае, если вам интересно, почему есть дополнительное скрытое поле? - тогда прочитайте это . Это определенно решение, которое заставляет вас сначала думать «хммммм», но потом вы понимаете, что оно довольно элегантное.
Проблема в том, что я пытаюсь проанализировать данные на сервере. Ну, это не столько проблема, сколько беспокойство, если в будущем что-то изменится в рамках.
Если я использую встроенную привязку, все отлично - все для меня сделано. Но в моем случае я динамически генерирую флажки с неизвестными именами и без соответствующих свойств в моей модели.
Так что мне приходится писать такой код:
if (forms["List_RETAIL_NOTIFICATION"] == "true,false") {
}
или это:
if (forms.GetValues("List_RETAIL_NOTIFICATION")[0] == "true") {
}
Обе, на которые я до сих пор смотрю и съеживаюсь - тем более, что нет гарантии, что это всегда будет возвращаемое значение. Мне интересно, есть ли способ получить доступ к слою абстракции, используемому связывателями моделей - или я застрял с моим контроллером, «зная» так много о взломах HTTP POST.
Да, может быть, я немного придирчив, но, возможно, есть лучший способ использовать связующие модели, которые я могу использовать для чтения динамически создаваемых параметров флажков.
Кроме того, я надеялся, что этот пост может помочь другим в поиске: «правда, ложь». Хотя я знал, почему это происходит, я просто забыл, и мне потребовалось немного времени, чтобы понять «дух».
К вашему сведению: я попробовал еще несколько вещей, и вот что я нашел:
forms["List_RETAIL_NOTIFICATION"]
оценивается как "истина, ложь"
forms.GetValues("List_RETAIL_NOTIFICATION")[0]
оценивается как "истина"
(forms.GetValue("List_RETAIL_NOTIFICATION").RawValue as string[])[0]
оценивается как "истина"
forms.GetValues("List_RETAIL_NOTIFICATION").FirstOrDefault()
оценивается как "истинно"