2011-10-26 10 views
6

Sospecho que esto es simple y me lo estoy perdiendo.MVC 3 - muestra el valor del diccionario en la vista

Tengo un modelo de vista que tiene un diccionario como una de sus propiedades. Este diccionario es para llenar una selección HTML con la Categoría cuando estoy editando un registro. También hay una propiedad para indicar el CategoryID seleccionado. Sin embargo, cuando solo estoy mostrando el registro, quiero mostrar el valor del par clave/valor que corresponde con el CategoryID.

Mi vista del modelo:

public class ItemEditVM 
{ 
    public int ItemID { get; set; } 
    public int? CategoryID { get; set; } 
    public string ItemDesc { get; set; } 
    public Dictionary<int, string> CategorySelect { get; set; } 
} 

he intentado algo como esto pero tengo los parámetros de la función equivocada:

@Html.DisplayFor(model => model.CategorySelect.TryGetValue(model.CategoryID, out val)) 

También he intentado esto lo que no funcionará y no específica mensaje de error:

@Html.DisplayFor(model => model.CategorySelect.SingleOrDefault(c=> int.Parse(c.Value) == model.CategoryID).Value) 

¿Cómo puedo hacer esto?

Muchas gracias

LA RESPUESTA CORRECTA (Gracias a Mystere Man)

@Html.DisplayFor(model=>model.CategorySelect[Model.CategoryID.Value]) 
+0

Una nota rápida: no diseñé esta base de datos y en la tabla de elementos el ID de categoría es un FK pero también puede aceptar valores nulos. No sabía que pudieras hacer eso. De todos modos, para no violar el FK, en realidad el CategoryID siempre estará poblado. – BKahuna

+0

Por supuesto, los FK pueden ser nulos. PK no puede ser nulo. Un FK que es nulo solo significa que no hay relación. –

Respuesta

7

¿Usted ha intentado:

@Model.CategorySelect[Model.CategoryID.Value] 

Dado que, como usted dice, CategoryID no será nulo, esto no debería ser un problema ... a menos que sea nulo, en cuyo caso debe realizar una validación.

+0

En realidad lo hice y me da un error de sobrecarga (algunos argumentos no válidos) – BKahuna

+0

@BKahuna - Eso no debería ser, solo hay un argumento para un indexador de diccionario, que es el valor. ¿Incluyó el .Value? ¿Te aseguraste de usar la mayúscula M en el modelo? –

+0

No, lo olvidé. ¿Por qué necesito el valor.? He publicado la respuesta correcta más arriba en mi pregunta original. @Mystere - ¡gracias por la ayuda! – BKahuna

6
@foreach(var keyValue in Model.CategorySelect.keys) 
{ 
    foreach(var cat in @Model.CategorySelect[keyValue] 
    { 
     <p>@cat</p> <!--whatever html you fancy--> 
    } 
} 
+0

Solo quería darte una manera diferente. – hidden

Cuestiones relacionadas