Pregunta

Creo que esta pregunta se aplica a cualquiera de los "Para" ayudantes HTML, pero mi problema específico está utilizando CheckBoxFor ...

Tengo un modelo que es de tipo IEnumerable, donde los derechos es un simple POCO. Este modelo es en realidad una propiedad de un modelo más grande que he creado un EditorTemplate para. Aquí está el cuadro más grande de mi 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;}
}

He creado una editortemplate llamada "ListRights" que utiliza mi punto de vista principal. Por ejemplo: <% = Html.EditorFor (m => m.Rights)%>.

En ListRights.ascx, quiero código como el siguiente:

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

Sé que la línea CheckBoxFor no funciona, pero yo quiero hacer algo que genera el mismo resultado, como si el acceso era una propiedad en el modelo.

En el ejemplo anterior, me gustaría que todo la vinculación automática en el poste.

He intentado falsificar la casilla de verificación con un código similar a este, pero no vinculación 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>

¿Alguna sugerencia?

¿Fue útil?

Solución 2

He encontrado la respuesta mediante el uso de un blog de Steve Sanderson en http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

El uso de "Html.BeginCollectionItem" trabajado en mi situación.

He creado una EditorTemplate de los derechos (en mi ejemplo). Luego añadió BeginCollectionItem de Steve a la plantilla. Llamé a la plantilla mediante Html.RenderPartial como se sugiere en el blog de Steve.

quería utilizar Html.EditorFor (m => m.item), pero que no funciona debido elemento está en la ParaCada y no en el modelo. EditorFor podría ser utilizado en este caso?

Otros consejos

Creo que tuvo problemas porque esto no funciona

<%=Html.CheckBoxFor(access) %>

y esto tampoco funcionó

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

pero esto debería funcionar

<%=Html.CheckBoxFor(x=>access.HasAccess) %>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top