Sfondo
Sto lavorando su progetto di sito web del cliente e ho utilizzato MVC per creare il sito. Ho EF che lavora con un SQLDB per memorizzare i dati.Crea elenco <T> alla vista e POST con modulo per MVC Controller
mio WebApp è dotato di una zona di back-office per la gestione/aggiunta/aggiornamento Item
s ecc
una pagina particolare in questione consente all'utente di aggiungere un nuovo Item
al database inserendo i dati e facendo clic ' Salva "nel modulo.
Il Item
ha alcune proprietà che vengono tutte aggiunte al DB in una nuova riga.
Item
contiene anche un List<Appointment>
s dichiarato contro di esso (li serializzerò e li salverò nella colonna appropriata).
Gli oggetti appaiono così (Ho rimosso alcune proprietà per brevità):
public class Item
{
public int Id { get; set; }
public string Name { get; set; }
public List<Appointment> Appointments { get; set; }
// Plus some other properties
}
public class Appointment
{
public string Day { get; set; }
public string From { get; set; }
public string To { get; set; }
}
Ho impostato un ViewModel da usare e sto praticando tutta quella roba al solito buone pratiche. Ecco come si presenta:
public class AddItemViewModel
{
[Required(ErrorMessage = "Please enter an item name")]
[Display(Name="Item Name")]
public string Name { get; set; }
[Display(Name="Appointments")]
public List<Appointment> Appointments { get; set; }
...
// Other properties in here
...
}
Sto usando il motore di visualizzazione Razor.
Ho tutto a posto usando l'helper @Html.EditorFor(x => x.Property)
; per tutti gli elementi (ma uno - vi dico in un attimo) sulle proprietà dell'oggetto root (Item
).
Posso postare ViewModel sul controller e salvare un nuovo Item
e tutto il jazz, quindi tutto va bene lì.
Problema
Ho un List<Appointment>
dichiarato nel mio ViewModel.
Come posso consentire all'utente di aggiungere nuovi Appointment
s per questo List<Appointment>
da all'interno pagina?
voglio assegnarli all'oggetto Item
da creare quando il ViewModel è pubblicato - Farò questo nel mio controller/servizi, ecc
Come posso raggiungere questo obiettivo?
vista desiderata
Ho bisogno che l'utente sia in grado di aggiungere Appointment
s dall'interno della pagina - fino a tuttavia molti che piace, davvero.
Vorrei che ci fosse un elenco dei "creati" Appointment
s in un elenco (ul
o qualcosa di simile ecc.) In un'area nella pagina.
Sotto quella lista, vorrei qualche campo di testo che sono rilevanti per le proprietà Day
, From
e To
per la Appointment
- con un pulsante 'Aggiungi', che aggiunge alla lista (e cancella le caselle di testo, idealmente).
Come bonus, vorrei anche una sorta di pulsante "Elimina" × "-sque" accanto a ciascun elemento, per rimuoverlo dallo List<Appointment>
e dalla vista.
Ecco un esempio (disegnato in MSPaint - strumenti della vecchia scuola ftw!) Di quello che immagino la vista a guardare come:
Le cose che ho provato
io siamo stati scavando in lungo e in largo, ma nulla è ancora arrivato in mio soccorso.
Ho guardato molte soluzioni a che fare con l'aggiunta di oggetti in JavaScript per pagina - che fa il lavoro. L'unico problema è che non posso prenderli nell'oggetto che viene pubblicato sul controller.
Sono stato anche indicato direttamente di utilizzare Ajax per creare un oggetto
Appointment
e inserirlo nella pagina, ma questo non sembra essere stato rilevato.
La tua esperienza, conoscenza e saggezza è molto apprezzata.
Fare riferimento alle risposte [qui] (http://stackoverflow.com/questions/29161481/post-a-form-array-without- riuscito/29161796 # 29161796) e [qui] (http://stackoverflow.com/questions/28019793/submit-same-partial-view-called-multiple-times-data-to-controller/28081308#28081308) per alcune opzioni –
Grazie @StephenMuecke - sembrerebbe che tu abbia avuto un po 'di esperienza con questo tipo di cose prima? Ho letto velocemente gli articoli che hai linkato - il secondo link sembra essere più rivolto a ciò che sto cercando. Avrò un aspetto corretto in modo più dettagliato quando il tempo lo consentirà. Nel frattempo, è possibile che tu possa essere in grado di fornirmi un codice di esempio per il mio scenario, per favore (capisco che potrebbe essere un * grande * chiedere, però)? –
Dai un'occhiata a [questo DotNetFiddle] (https://dotnetfiddle.net/UjxtUW) per un esempio (e il tuo modello di 'appuntamento' dovrebbe essere 'DateTime Day',' TimeSpan From' e 'TimeSpan To' - not' string ') –