Я полагаю, что этот вопрос относится к любому из "Для" помощников 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>
Какие-либо предложения?
Я нашел ответ используя сообщение в блоге Стива Сандерсона по адресу 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?