Pergunta

Eu acredito que esta questão se aplica a qualquer um dos "For" ajudantes HTML, mas o meu problema específico está usando CheckBoxFor ...

Eu tenho um modelo que é do tipo IEnumerable, onde os direitos é um POCO simples. Este modelo é realmente uma propriedade de um modelo maior que eu criei um EditorTemplate para. Aqui está a foto maior do meu modelo:

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;}
}

Eu criei um editortemplate chamado "LISTRIGHTS" que meus principais usos vista. Por exemplo: <% = Html.EditorFor (m => m.Rights)%>.

Em ListRights.ascx, eu quero código como este:

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

Eu sei que a linha CheckBoxFor não trabalho, mas eu quero fazer algo que gera o mesmo resultado, como se o acesso era uma propriedade no modelo.

No exemplo acima, eu gostaria que tudo vinculação automática no post.

Eu tentei simular o CheckBox com código semelhante a este, mas não vinculação automática:

<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>

Todas as sugestões?

Foi útil?

Solução 2

Eu encontrei a resposta usando um post no blog de Steve Sanderson em http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

Usando o "Html.BeginCollectionItem" trabalhou na minha situação.

Eu criei um EditorTemplate de direitos (no meu exemplo). Em seguida, acrescentou BeginCollectionItem de Steve para esse modelo. Liguei para o modelo usando Html.RenderPartial como sugerido no blog de Steve.

Eu queria usar Html.EditorFor (m => m.item), mas isso não funciona porque item está na ForEach e não no modelo. Poderia EditorFor ser usado neste caso?

Outras dicas

Eu acho que você teve problemas, porque isso não funciona

<%=Html.CheckBoxFor(access) %>

e isso não quer trabalhar

<%=Html.CheckBoxFor(access=>access.HasAccess) %>

mas isso deve funcionar

<%=Html.CheckBoxFor(x=>access.HasAccess) %>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top