none
Passaggio ViewModel a classi parziali RRS feed

  • Domanda

  • Ciao,

    ho un problema con le PartialView e il passaggio di una parte di un viewmodel alle viste parziali. Nel mio applicativo reale avrò una partialview di ricerca utente e volevo passare questo dato alla vista principale in fase di caricamento dei dati.

    Per semplificare il tutto ho creato un esempio più semplice...il problema che ho è che il campo utente è null nell'action result di caricamento dati

    HomeController :

    public class HomeController : Controller
        {
            //
            // GET: /Home/
    
            public ActionResult Index()
            {
                VistaViewModel modello = new VistaViewModel();
                return View(modello);
            }
    
            [HttpPost]
            public ActionResult Inserisci(VistaViewModel v)
            {
                return View("Index",v);
            }
    
        }

    RicercaUtenteController

    public class RicercaUtenteController : Controller
        {
            public PartialViewResult Index(string user)
            {
                return PartialView();
            }
    
        }

    I modelli :

    public class Utente
        {
            public string Nome { get; set; }
        }
    
     public class Oggetti
        {
            public int ID { get; set; }
        }
    
    
     public class VistaViewModel
        {
            public Utente MioUtente { get; set; }
    
            public Oggetti Oggetto {get;set;}
    
            public VistaViewModel()
            {
                MioUtente = new Utente();
                Oggetto = new Oggetti();
            }
        }

    E infine le 2 viste... (scusate per la quantità di codice postato)

    @* HOME VIEW *@
    
    @model MvcApplication1.Models.VistaViewModel
    
    @{
        ViewBag.Title = "Index";
    }
    
    <h2>Index</h2>
    
    @using(Html.BeginForm("Inserisci", "Home"))
    {
    @Html.Label("Oggetto")
    @Html.TextBoxFor(x => x.Oggetto.ID)
     
    @Html.Action("Index","RicercaUtente", this.Model.MioUtente)
    
    
    <input type="submit" value="OK" />
    }
    
    @*@Html.Label("Utente")
    @Html.TextBoxFor(x => x.MioUtente.Nome)*@ @* SE SOSTITUISCO QUESTO ALLA PARTIAL FUNZIONA *@

    E la vista di ricerca

    @model MvcApplication1.Models.Utente
    
    @{
        ViewBag.Title = "Index";
    }
    
    <div style="background-color:purple;">
    
    @Html.Label("Utente")
    @Html.TextBoxFor(x => x.Nome)
        </div>

    Qualunque cosa io scriva nel textbox di ricerca non viene preso in considerazione al submit...

    Cosa sto sbagliando?

    Grazie ciao

    venerdì 30 agosto 2013 14:14

Tutte le risposte

  • Puoi risolvere facilmente modificando le due viste come segue

    @using (Html.BeginForm("Inserisci", "Home"))
    {
        @Html.Label("Oggetto")
        @Html.TextBoxFor(x => x.Oggetto.ID)
    
        Html.RenderPartial("~/Views/RicercaUtente/Index.cshtml");
    
        <input type="submit" value="OK" />
    }

    Views/Home/Index.cshtml

    @model WebApplication1.Models.VistaViewModel
    
    @{
        ViewBag.Title = "Index";
    }
    
    <div style="background-color:red;">
    
        @Html.Label("Utente")
        @Html.TextBoxFor(x => x.MioUtente.Nome)
    </div>

    Views/RicercaUtente/Index.cshtml

    venerdì 10 giugno 2016 10:36