Флажки MVC2: все еще возникают проблемы; Или: При чем тут выбор? - PullRequest
2 голосов
/ 11 ноября 2010

Во все возрастающей эпической ошибке, связанной с моими формами «Создать» и «Редактировать», у меня все еще возникают проблемы при создании флажков с помощью Html.Checkbox (). Я не уверен, стоит ли мне просто вручную писать HTML на этом этапе.

У меня есть вид модели:

public class AdminGameReviewViewModel
{
    public Game GameData { get; set; }
    public List<Genre> AllGenres { get; set; }
    public List<PlatformListing> AllPlatforms { get; set; }
}

И вспомогательная модель:

public class PlatformListing
{
    public Platform Platform { get; set; }
    public bool IsSelected { get; set; }
}

И я пытаюсь сгенерировать флажки так:

<%: Html.Label("Platforms") %><br />
<% Model.AllPlatforms.ForEach(p => Html.Encode(Html.CheckBox("PlatformIDs", p.IsSelected, new { value = p.Platform.PlatformID }))); %>

Но они вообще не отображаются.

Мне любопытно, почему мне нужно предоставить логическое значение для самих флажков. Я бы подумал, что он просто отправит обратно проверенные значения в виде массива или списка, похожего на PHP $ _POST. Итак, я не уверен, правильно ли я реализую свое логическое свойство, в дополнение к любым другим ошибкам, которые я совершаю. Логическое значение вынуждает меня скрывать данные, которые я хочу отображать / связывать дальше, чем хотелось бы, и это дает мне проблемы с «видением» того, что я делаю неправильно.

У меня возникает ощущение, что я слишком глубоко смотрю на свою проблему и пытаюсь сделать решение более сложным, чем оно должно быть. Учитывая мою неопытность с MVC2 / C #, я просто не уверен, куда идти дальше. Не помогает то, что это, кажется, единственная часть обработки форм, которая либо закрывается, либо полностью игнорируется большинством демонстраций и учебников.

Итак, снова, любая помощь будет принята с благодарностью.

1 Ответ

3 голосов
/ 11 ноября 2010

Проблема в том, что вы ничего не записываете в поток ответа.

Html.Checkbox () возвращает строку, она не записывает непосредственно в объект ответа (как и Html.Encode () - который просто экранирует зарезервированные символы и возвращает строку результата). Кроме того, метод расширения ForEach только выполняет действие, но не возвращает значение.

Таким образом, вы должны отказаться от расширения ForEach и использовать кодовые фрагменты <% =%> или <%:%>:

<% foreach (var p in Model.AllPlatforms) { %>
   <%= Html.CheckBox("PlatformIDs", p.IsSelected, new { value = p.Platform.PlatformID }) %>
<% } %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...