Quick MVC2 чекбокс вопрос - PullRequest
1 голос
/ 13 января 2011

Чтобы привязать мою коллекцию EF4 EntityCollection к значениям флажков, я должен вручную создать флажки в цикле следующим образом:

<p>
    <%: Html.Label("Platforms") %><br />
    <% for(var i = 0; i < Model.AllPlatforms.Count; ++i)
       { %>
           <%: Model.AllPlatforms[i].Platform.Name %> <input type="checkbox" name="PlatformIDs" value="<%: Model.AllPlatforms[i].Platform.PlatformID %>" /><br />
    <% } %>
</p>

Это работает, но оно не заполняет группу флажков автоматически существующими значениями при редактировании объекта модели. Могу я выдумать что-то вроде?

<p>
    <%: Html.Label("Platforms") %><br />
    <% for(var i = 0; i < Model.AllPlatforms.Count; ++i)
       { %>
           <%: Model.AllPlatforms[i].Platform.Name %> <input type="checkbox" name="PlatformIDs" value="<%: Model.AllPlatforms[i].Platform.PlatformID %>" checked=<%: Model.GameData.Platforms.Any(p => PlatformID == i) ? "true" : "false" %> /><br />
    <% } %>
</p>

Я полагаю, что по этим направлениям должно быть что-то, что сработает, и мне просто интересно, нахожусь ли я на правильном пути.

РЕДАКТИРОВАТЬ: я намеренно держусь подальше от флажка MVC вспомогательных методов MVC, поскольку они слишком негибки для моих нужд. Мои флажки используют целые числа в качестве значений в зависимости от дизайна.

Ответы [ 2 ]

2 голосов
/ 13 января 2011

Закрыть.Вы действительно захотите изменить свой серверный код так, чтобы атрибут «checked» вообще не генерировался , если вы не хотите, чтобы флажок был установлен.

checked="true"

или

checked="false"

технически оба недопустимые HTML. Источник .

Если вы хотите установить флажок, вы должны указать:

checked="checked"

Любое значение в кавычках фактически отметит флажок (включая флажок = "false "), но проверено =" проверено "считается правильным.Поэтому, обновляя свой код, просто настройте троичный оператор, чтобы он использовал check = 'checked' или вообще ничего.

<%: Model.AllPlatforms[i].Platform.Name %> <input type="checkbox" name="PlatformIDs" value="<%: Model.AllPlatforms[i].Platform.PlatformID %>" <%: Model.GameData.Platforms.Any(p => p.PlatformID == i) ? "checked='checked'" : "" %> /><br />
0 голосов
/ 13 января 2011

Вы на правильном пути, но я думаю, что вам нужно изменить фрагмент кода на

<%: Model.GameData.Platforms.Any(p => PlatformID == i) ? "checked='true'" : string.Empty %>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...