Вопрос

Я считаю, что этот вопрос относится к любому из помощников 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) %>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top