2011-04-20 19 views

Respuesta

18

Tal sintaxis no es compatible con la maquinilla de afeitar, lo siento.

+7

Bummer. Me encantaría ver su apoyo en el futuro, pero no he visto a nadie más quejarse, así que dudo que gane ningún tipo de tracción. Gracias por tu respuesta. – egoodberry

+3

¡Quiero esto! Entonces eso es queja o al menos una solicitud de otra persona. –

+1

Wow. Eso es bastante impactante para ser honesto. – fearofawhackplanet

23

dado que @Model está esperando un tipo - no es una declaración de tipo que puede usar:

@model DtoViewModel<IDto> 

y tomar ventaja de covarianza genérica

6

Suponiendo, desea utilizar un tipo genérico con el fin para evitar duplicaciones de código en cada vista de ViewModel<T> puede hacerlo de esta manera:

1. crear una vista de las partes de ViewModel<T> que son únicos a la vista

ModelView.cshtml:

@model ViewModel<specificType> 

@{Layout = "~/Views/Shared/Layout.cshtml";} 
<h2 class="sub-header">Specific type view</h2> 

2. crear una vista para las partes comunes, que debe ser generado en cada vista de <T>

Grid.cshtml :

@{ var webGrid = new WebGrid(Model.PageItems); } 

<div class="row" style="overflow: auto"> 
    @webGrid.GetHtml("table-striped", mode: WebGridPagerModes.All, firstText: "First", lastText: "Last") 
</div> 

Como es una vista parcial, no necesita declarar el tipo de Model nuevamente. Simplemente usará el modelo que definió en la vista principal, que lo renderiza. La propiedad IList<T> PageItems de su modelo, se mantendrá fuertemente tipada con <specificType>.

. No se olvide de hacer realidad la visión parcial de sus partes comunes

ModelView.cshtml:

@RenderPage("~/Views/Shared/Grid.cshtml") 
-1

Esto no es ideal, pero funciona y podría ser bastante creativo con este patrón.

@model YourNameSpace.MyModel 


public MyModel 
{ 
    public MyGenericType<string> ModelAStuff {get;set;} 
    public MyGenericType<int> ModelBStuff {get;set;} 
    public MyGenericType<DateTime> ModelCStuff {get;set;} 
} 

public class MyGenericType<T> 
{ 
    //use T how ever you like 
    public T Color {get;set;} 
    public T Year {get;set;} 
}