Foreach для свойства IEnumerable и CheckBoxFor в ASP.Net MVC
-
18-09-2019 - |
Вопрос
Я считаю, что этот вопрос относится к любому из помощников Html "For", но моя конкретная проблема связана с использованием CheckBoxFor...
У меня есть модель типа IEnumerable, где права — это простой POCO.Эта модель на самом деле является свойством более крупной модели, для которой я создал 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;}
}
Я создал шаблон редактора под названием «ListRights», который использует мое основное представление.Например:<%=Html.EditorFor(m => m.Rights) %>.
В 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>
Какие-либо предложения?
Решение 2
Я нашел ответ, воспользовавшись сообщением в блоге Стива Сандерсона по адресу 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 в этом случае?
Другие советы
Думаю, у тебя были проблемы, потому что это не сработало
<%=Html.CheckBoxFor(access) %>
и это тоже не сработало
<%=Html.CheckBoxFor(access=>access.HasAccess) %>
но это должно сработать
<%=Html.CheckBoxFor(x=>access.HasAccess) %>