Foreach на свойстве IEnumerable и CheckBoxFor в ASP.NET MVC

Я полагаю, что этот вопрос относится к любому из "Для" помощников HTML, но моя определенная проблема использует CheckBoxFor...

У меня есть модель, которая имеет тип IEnumerable, где права являются простым ПОСТЕПЕННО. Эта модель является на самом деле свойством большей модели, для которой я создал EditorTemplate. Вот большее изображение моей модели:

public class bigmodel
{
     public string Title {get; set;}
     public string Description {get; set;}

     [UIHint("ListRights")]
     public IEnumerable<rights> Rights {get;set;}
}

public class rights
{
    public bool HasAccess {get; set;}
    public string Description {get;set;}
}

Я создал editortemplate под названием "ListRights", который использует мое основное представление. Например: <% =Html. EditorFor (m => m. Права) %>.

В ListRights.ascx я хочу код как это:

<table>
  <% foreach(rights access in Model)
  { %>
      <tr>
        <td>
            <%=Html.CheckBoxFor( access ) %>
        </td>
        <td>
            <%=access.Description %>
        </td>
      </tr>
  <% } %>
</table>

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

В вышеупомянутом примере я хотел бы, чтобы все автосвязало на сообщении.

Я попытался фальсифицировать CheckBox с кодом, подобным этому, но он не автосвязывает:

<table>
  <% for(int i=0; i < Model.Count(); i++)
  { %>
      <tr>
        <td>
            <%=Html.CheckBox(string.Format("[{0}].HasAccess",i), Model.ElementAt(i).HasAccess)%>
        </td>
        <td>
            <%=access.Description %>
        </td>
      </tr>
  <% } %>
</table>

Какие-либо предложения?

11
задан Mike Therien 9 March 2010 в 14:08
поделиться

1 ответ

Я нашел ответ используя сообщение в блоге Стива Сандерсона по адресу http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

Использование «Html.BeginCollectionItem» работал в моей ситуации.

Я создал EditorTemplate для прав (в моем примере). Затем добавил в этот шаблон BeginCollectionItem Стива. Я вызвал шаблон с помощью Html.RenderPartial, как это было предложено в блоге Стива.

Я хотел использовать Html.EditorFor (m => m.item), но это не работает, потому что элемент находится в ForEach, а не в модели. Можно ли в этом случае использовать EditorFor?

5
ответ дан 3 December 2019 в 07:12
поделиться
Другие вопросы по тегам:

Похожие вопросы: