Domanda

Credo che questa domanda vale per una delle "Per" aiutanti HTML, ma il mio problema specifico sta usando CheckBoxFor ...

Ho un modello che è di tipo IEnumerable, dove i diritti è un semplice POCO. Questo modello è in realtà una proprietà di un modello più grande che ho creato un EditorTemplate per. Ecco il quadro più ampio del mio modello:

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

ho creato un editortemplate chiamata "LISTRIGHTS" che la mia vista principale utilizza. Ad esempio: <% = Html.EditorFor (m => m.Rights)%>.

In ListRights.ascx, voglio codice come questo:

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

So che la linea CheckBoxFor non funziona, ma voglio fare qualcosa che genera lo stesso risultato, come se l'accesso era una proprietà del modello.

Nell'esempio di cui sopra, vorrei tutto per bind automatico su post.

Ho provato fingendo il checkbox con codice simile a questo, ma non AutoBind:

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

Qualche suggerimento?

È stato utile?

Soluzione 2

Ho trovato la risposta utilizzando un post sul blog di Steve Sanderson a http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

Uso di "Html.BeginCollectionItem" lavorato nella mia situazione.

ho creato un EditorTemplate per i diritti (nel mio esempio). Poi ha aggiunto BeginCollectionItem di Steve a tale modello. Ho chiamato il modello utilizzando Html.RenderPartial come suggerito nel blog di Steve.

ho voluto usare Html.EditorFor (m => m.item), ma che non funziona perché oggetto è in ForEach e non nel modello. Potrebbe EditorFor essere utilizzato in questo caso?

Altri suggerimenti

Credo che hai avuto problemi perché questo non ha funzionato

<%=Html.CheckBoxFor(access) %>

e questo non ha funzionato neanche

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

, ma questo dovrebbe funzionare

<%=Html.CheckBoxFor(x=>access.HasAccess) %>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top