10 messaggi dal 04 gennaio 2012
Salve ragazzi,
nella mia applicazione asp.net MVC, ho un modello derivato dalla seguente classe
    public partial class Ordine
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public Ordine()
        {
           this.ordinidettaglio = new HashSet<OrdiniDettaglio>();
        }
    
        public int Id { get; set; }
        public System.DateTime Data { get; set; }
        public int LocaliID { get; set; }
        public int Numero { get; set; }
        public string Operatore { get; set; }
        public string Annotazioni { get; set; }
        public int StatoOrdineID { get; set; }
        public int UtentiID { get; set; }
    
        public virtual Locale locali { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<OrdiniDettaglio> ordinidettaglio { get; set; }
        public virtual Utente utenti { get; set; }
        public virtual StatoOrdini statoordini { get; set; }
    }


Premetto che la proprietà ordinidettaglio deve essere per forza ICollection e non può essere List, altrimenti ho altri problemi.

Nella parte html, nella parte relativa alla ICollection ho questa situazione

...
                        @foreach (var item in Model.ordinidettaglio)
                        {
                            <tr>
                                @Html.HiddenFor(model => item.ProdottiID)
                                <td class="col-md-6 col-sm-6">@Html.DisplayFor(model => item.prodotto.Descrizione) </td>
                                <td class="col-md-1 col-sm-1">@Html.DisplayFor(model => item.prodotto.UM)</td>
                                <td class="col-md-1 col-sm-1">@Html.DisplayFor(model => item.QtaOrdinata)</td>
                                <td class="col-md-4 col-sm-4">@Html.TextAreaFor(model => item.Annotazioni, new { @class = "form-control" })</td>

                            </tr>
                        }
...


Quando faccio la post e passo il modello al controller per salvare i dati, la classe principale è valorizzata ma la ICollection è sempre null, come posso fare a risolvere il problema senza usare una proprietà di tipo List?

Grazie in anticipo
10 messaggi dal 04 gennaio 2012
Ho trovato la soluzione, il problema era dovuto al fatto che utilizzando il foreach, l'attributo name dell'elemento html risultante era lo stesso per tutti gli elementi della collezione, per cui in fase di post veniva generato un errore che faceva si che la collezione fosse nulla.
Ho risolto forzando il name di tutti i vai tag in questo modo:

@{int i = 0;}
@foreach (var item in Model.ordinidettaglio)
{
  <tr>


    @Html.HiddenFor(model => item.ProdottiID, htmlAttributes: new { @id=string.Format("ProdottiID{0}",@i), @Name = string.Format("ordinidettaglio[{0}].ProdottiID", @i)})
    <td class="col-md-6 col-sm-6">@Html.DisplayFor(model => item.prodotto.Descrizione, new { @id = string.Format("ProdottiDes{0}", @i) }) </td>
    <td class="col-md-1 col-sm-1">@Html.DisplayFor(model => item.prodotto.UM, new { @id = string.Format("ProdottiUM{0}", @i) })</td>
    <td class="col-md-1 col-sm-1">@Html.DisplayFor(model => item.QtaOrdinata, new { @id = string.Format("QtaOrdinata{0}", @i) })</td>
    <td class="col-md-4 col-sm-4">@Html.TextAreaFor(model =>item.Annotazioni, new { @class = "form-control", @id = string.Format("Annotazioni{0}", @i), @Name = string.Format("ordinidettaglio[{0}].Annotazioni", @i)})</td>

  </tr>
  i++;
}




Spero possa essere utile a qualcuno.

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.