Ho un modello di vista condiviso da due pagine diverse. I modelli di visualizzazione sono abbastanza simili con l'eccezione di una proprietà: Indirizzo. Il modello di vista contiene i campi nome e posizione. Tuttavia, l'etichetta dell'indirizzo della vista cliente dovrebbe contenere: Indirizzo cliente e l'etichetta dell'indirizzo della vista dipendente deve contenere: Indirizzo dipendente. Visualizzeranno anche diversi messaggi di errore.Sovrascrittura delle proprietà di un modello di vista di base in ASP.NET MVC 3
Ecco una versione semplificata di quello che sto cercando di realizzare:
public class BaseLocation
{
[Display(Name="Your Name")]
public string Name {get;set;}
public virtual string Address {get;set;}
}
public class CustomerLocation : BaseLocation
{
[Display(Name="Customer Address")]
public override string Address {get;set;}
}
public class EmployeeLocation : BaseLocation
{
[Display(Name="Employee Address")]
public override string Address {get;set;}
}
Poi ho creato un parziale per la posizione di base, in questo modo:
@model BaseLocation
***ASP.NET MVC Helpers here: labels, text, validation, etc.
Infine, il Cliente e Pagine dei dipendenti, chiamerei il partial e invialo il tipo sottoclasse.
Customer.cshtml
@model CustomerLocation
@Html.Render("_BaseLocation", Model)
Employee.cshtml
@model EmployeeLocation
@Html.Render("_BaseLocation", Model)
Il risultato è che non vedrei gli attributi dei dati per il tipo specifico. Ad esempio, nella pagina cliente, otterrei l'etichetta "Indirizzo" anziché "Indirizzo cliente".
Preferisco non creare due partial con gli stessi dati per ogni tipo specifico, semplicemente perché una proprietà nel modello di visualizzazione condivisa deve avere un'etichetta e un messaggio di errore diversi. Qual è il modo migliore per farlo? Grazie.
Prova a fare la base astratta, vedere se cambia qualcosa. – gdoron
@gdoron, non cambierà nulla. –
@DarinDimitrov, quindi l'unico modo in cui riesco a pensare è scrivere il proprio 'HtmlHelper' che fa bene il lavoro. – gdoron