Ho un ViewModel che ha un oggetto complesso come uno dei suoi membri. L'oggetto complesso ha 4 proprietà (tutte le stringhe). Sto cercando di creare una vista parziale riutilizzabile in cui posso passare l'oggetto complesso e fargli generare l'html con helper html per le sue proprietà. Funziona tutto alla grande. Tuttavia, quando invio il modulo, il raccoglitore modello non sta mappando i valori sul membro ViewModel in modo da non ottenere nulla sul lato server. Come posso leggere i valori che un utente digita negli helper html per l'oggetto complesso.acquisizione dei valori da un oggetto complesso nidificato passato a una vista parziale
ViewModel
public class MyViewModel
{
public string SomeProperty { get; set; }
public MyComplexModel ComplexModel { get; set; }
}
MyComplexModel
public class MyComplexModel
{
public int id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
....
}
controller
public class MyController : Controller
{
public ActionResult Index()
{
MyViewModel model = new MyViewModel();
model.ComplexModel = new MyComplexModel();
model.ComplexModel.id = 15;
return View(model);
}
[HttpPost]
public ActionResult Index(MyViewModel model)
{
// model here never has my nested model populated in the partial view
return View(model);
}
}
View
@using(Html.BeginForm("Index", "MyController", FormMethod.Post))
{
....
@Html.Partial("MyPartialView", Model.ComplexModel)
}
Vista Parziale
@model my.path.to.namespace.MyComplexModel
@Html.TextBoxFor(m => m.Name)
...
come posso associare questi dati sul modulo di presentazione in modo che il modello principale contiene i dati inseriti nel modulo web dal punto di vista parziale?
grazie
EDIT: "ComplexModel" Ho capito che ho bisogno di anteporre a tutti i nomi del mio controllo nella vista parziale (caselle di testo) in modo che si associ all'oggetto nidificato, ma non posso passare il tipo ViewModel alla vista parziale per ottenere quel livello in più perché deve essere generico per accettare diversi ViewModel tipi. Potrei semplicemente riscrivere l'attributo name con javascript, ma mi sembra troppo ghetto. In quale altro modo posso fare questo?
EDIT 2: Posso impostare staticamente l'attributo name con new {Name = "ComplexModel.Name"} quindi penso di essere in affari a meno che qualcuno non abbia un metodo migliore?
questo sembra molto promettente. Ho lasciato l'ufficio per la giornata, ma gli darò una possibilità domani quando tornerò e segnerò come risposta se funziona per me. Grazie. –
questo è perfetto !! grazie mille –
boo ... Non riesco a sospenderlo perché dice che devo avere 15 reputazione. +1 per voi anche se, come appena ottengo i 15 rep :) –