Sto scrivendo un'app MVC2 utilizzando DataAnnotations. Ho un modello seguente:MVC2 - Come ottenere il modello principale (contenitore) all'interno del modello
public class FooModel
{
[ScaffoldColumn("false")]
public long FooId { get; set; }
[UIHint("BarTemplate")]
public DateTime? Bar { get; set;}
}
Desidero creare un modello di visualizzazione personalizzato per Bar. Ho creato seguente configurazione:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime?>" %>
<div class="display-label">
<span><%: Html.LabelForModel() %></span>
</div>
<div class="display-field">
<span><%: Html.DisplayForModel()%></span>
<%: Html.ActionLink("Some link", "Action", new { id = ??FooId?? }) %>
</div>
Ora, il mio problema è che all'interno modello per Bar voglio accedere un'altra proprietà da mio modello. Non voglio creare un modello separato per FooModel perché dovrò codificare tutte le altre proprietà di FooModel.
Dopo una breve indagine con un debugger vedo che:
this.ViewData.ModelMetadata.ContainerType
èFooModel
(come previsto)this.ViewData.TemplateInfo
ha una proprietà non pubblicoVisitedObjects
(di tipoSystem.Collections.Generic.HashSet<object>
) che contiene due elementi:FooModel
eDateTime?
.
Come posso accedere al mio FooModel? Non voglio abituarmi a usare Reflection.
Aggiornamento:
Ho accettato risposta mootinator come sembra a me come la migliore soluzione che permette tipo di sicurezza. Ho anche svalutato la risposta di Tx3, poiché la risposta del mootinator si basa su di essa. Ciononostante, penso che ci dovrebbe essere un supporto migliore per MVC in questo tipo di scenari, che credo siano abbastanza comuni nel mondo reale, ma che mancano alle app di esempio.
@Jakub: il modello di Bar.cshtml è di tipo 'DateTime?', Non c'è 'm.Bar', penso. – xport
@ Bin Riciclo - Saluti, modifica la domanda. –
@Jakub: Non capisco perché sia necessario accedere a 'FooModel' all'interno di' DateTime? '. Non ha senso. :-) – xport