Continuo a ottenere NullReferenceException
cercando di ripetere su una voce nulla su una riga.
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public Address Address { get; set; }
public int AddressID { get; set; }
}
public class Address
{
public int ID { get; set; }
public string FirstLine { get; set; }
public string SecondLine { get; set; }
}
Con il modello di scaffold predefinito, _context.Person.Include(c => c.Address);
La vista funziona bene se c'è un indirizzo o no.
Tuttavia, sto sostituendo la pagina indice predefinita con una griglia più recente che viene caricata tramite AJAX con meccanismo di filtraggio e di paging. Per questo, ho bisogno di convertire i dati sul mio ViewModel
Voglio essere in grado di visualizzare l'indirizzo in linea come testo. Ho provato il seguente:
var tmp = _context.Person.Include(x => x.Address).ToList();
tmp.ForEach(x => vm.List.Add(new IndexListItem()
{
Name = x.Name,
Address = x.Address.FirstLine + " " + x.Address.SecondLine,
ID = x.ID
}));
Ma, durante il debug, l'indirizzo sembra essere sempre nullo, anche se ci sono dati sulla riga.
Sono abbastanza sicuro di poterlo fare su un ciclo foreach standard e di fare un controllo se nullo, ma, non posso fare a meno di sentire che questo è qualcosa di abbastanza semplice e sono troppo complicato.
C'è un modo più semplice per restituire i dettagli dell'indirizzo di cui ho bisogno?
Come ho detto in un commento, dovresti farlo in una dichiarazione:
vm.List = _context.Person
.Select(p => new IndexListItem
{
Name = p.Name,
Address = p.Address.FirstLine + " " + p.Address.SecondLine,
ID = p.ID
}).ToList();
Questo ha due vantaggi:
Se non vuoi " "
come risultato puoi fare ...
Address = (p.Address.FirstLine + " " + p.Address.SecondLine).Trim()
...o...
Address = p.Address.FirstLine != null ? p.Address.FirstLine + " " : "")
+ p.Address.SecondLine
Ma non penso che importi molto per la visualizzazione dei dati.