Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [Asp.NET MVC] Includere più model in una pagina

    ciao!

    ho una pagina in cui devo usare più model.
    ho provato banalmente così dentro alla view:
    codice:
    @model MugViewModel
    @model MappeModel
    
    @{
        ViewBag.Title = "Nuovo";
    }
    
    @section styles {
        @Styles.Render("~/css/validation")
    }
    ..............
    ma mi da errore, dicendo che non riconosce i campi sotto che stanno nel primo model ma non nel secondo.
    come se il secondo sovrascivesse il primo.

    come si fa in questi casi?

  2. #2
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    In dichiarazione nella view ci va sempre un solo model, ma se nel in quello principale aggiungi una proprietà che è una List<altroModel>, puoi raggiungere poi quest'ultima nella tua view.

    L'esempio piu' chiaro che ho trovato in rete quando ne ho avuto l'esigenza forse è questo:

    http://www.dotnet-stuff.com/tutorial...in-asp-net-mvc

  3. #3
    ciao!

    ho provato a seguire la guida ma c'è qualcosa che non mi funziona.
    questo uno dei due model:
    codice:
    using System.ComponentModel.DataAnnotations;
    using X.PagedList;
    
    namespace Somministrazione.Web.UI.Models.Mappe
    {
        public class MappeModel
        {
            public IPagedList<MappeResult> SearchMappe { get; set; }
          
        }
    
        public class MappeResult
        {
            [Display(Name = "Id")]
            public long Id { get; set; }
    
            [Display(Name = "Nome file")]
            public string Name { get; set; }
        }
    }
    questo il secondo model:
    codice:
    using System.ComponentModel.DataAnnotations;
    using X.PagedList;
    
    namespace Somministrazione.Web.UI.Models.Mug
    {
        public class MugViewModel
        {
            [Display(Name = "Filtro")]
            public string SearchFilter { get; set; }
            public IPagedList<string> SearchResult { get; set; }
    
            [Required]
            [Display(Name = "Codice")]
            public string Codice { get; set; }
    
            ................
        }
    }
    questa il model di "raccordo":
    codice:
    using System.Collections.Generic;
    using Somministrazione.Web.UI.Models.Mappe;
    
    namespace Somministrazione.Web.UI.Models.Mug
    {
        public class MugNuovoModel
        {
            public List<MappeResult> mappeCaricate { get; set; }
    
            public MugViewModel mugModel { get; set; }
        }
    }
    questo il controller:
    codice:
            public ActionResult Nuovo()
            {
                MugNuovoModel mugNuovoModel = new MugNuovoModel();
                mugNuovoModel.mappeCaricate = new List<MappeResult>
                {
                    new MappeResult()
                    {
                        Id = 1,
                        Name = "mappa1.pdf"
                    },
                    new MappeResult()
                    {
                        Id = 2,
                        Name = "mappa2.pdf"
                    }
                };
    
                return View(mugNuovoModel);
            }
    questa la pagina:
    codice:
    @model MugNuovoModel
    
    <div class="form-group mt-3">
            @Html.LabelFor(m => m.Codice)
            @Html.TextBoxFor(m => m.Codice, new { @class = "form-control", @placeholder = "Es. 1111111" })
            @Html.ValidationMessageFor(m => m.Codice)
    </div>
    questo l'errore:
    codice:
    Errore di compilazione                             Descrizione: Errore durante la compilazione di una  risorsa necessaria per soddisfare la richiesta. Rivedere i dettagli  relativi all'errore e modificare in modo appropriato il codice sorgente.             
    
                  Messaggio di errore del compilatore: CS1061:  'MugNuovoModel' does not contain a definition for 'Codice' and no  accessible extension method 'Codice' accepting a first argument of type  'MugNuovoModel' could be found (are you missing a using directive or an  assembly reference?)
    non ho capito nella pagina che dovrei fare!

  4. #4
    ok risolto:
    codice:
    <div class="form-group mt-3">
              @Html.LabelFor(m => m.mugModel.Codice)
              @Html.TextBoxFor(m => m.mugModel.Codice, new { @class = "form-control", @placeholder = "Es. 1111111" })
              @Html.ValidationMessageFor(m => m.mugModel.Codice)
    </div>
    ......
                                        @foreach (var item in Model.mappeCaricate)
                                                {
                                                    <li class="list-group-item">
                                                        <a href="" alt="">
                                                            @item.Name
                                                        </a>
                                                    </li>
                                                }
    grazie!

  5. #5
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    infatti la proprietà 'codice' non era accessibile direttamente, ma passando per la classe messa come proprieta' del model principale.

    e' la chiave del doppio model per le viste.

    prego !

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.