2010-11-10 22 views
8

En mi aplicación, estoy tratando de dividir la Fecha y la Hora desde el campo DateTime para poder poner un jQuery Date Picker en la fecha. Encontré Hanselman's code for splitting the DateTime, sin embargo recibo un error de compilación en bindingContext.ValueProvider.TryGetValue(modelName, out valueResult);. El error que consigo es:ValueProvider no contiene una definición para TryGetValue

error 3 'System.Web.Mvc.IValueProvider' no contiene una definición para 'TryGetValue' y ningún método de extensión 'TryGetValue' aceptar un primer argumento de tipo 'System.Web. Mvc.IValueProvider 'podría encontrarse (¿falta una directiva using o una referencia de ensamblado?) C: \ Documents and Settings \ xxx \ Mis documentos \ Visual Studio 2008 \ Projects \ MyProject \ Project \ Helpers \ DateAndTimeModelBinder.cs 83 42 Proyecto

¿Qué me está faltando algo? Creé una nueva clase y puse su código en una carpeta de Ayudantes en mi proyecto.

+0

¿Podemos cambiar el título para ser más precisos? 'IValueProvider no contiene una definición para TryGetValue' o algo así? ¿Puedo cambiarlo? Ayudará a otros a encontrar su pregunta con exactitud. – jcolebrand

+0

Cambié eso. –

Respuesta

14

TryGetValue() no es miembro de System.Web.Mvc.IValueProvider. sospecho que tiene una extensión personalizada que será similar a:

public static bool TryGetValue(this IValueProvider valueProvider, string key, out ValueProviderResult result) { 
    try { 
     result = valueProvider.GetValue(key); 
     return true; 
    } 
    catch { 
     result = null; 
     return false; 
    } 
} 

actualización

TryGetValue() no es un método de extensión, sino que es un método del tipo IDictionary <T,U>. El tipo de bindingContext.ValueProvider ha cambiado desde MVC1 como @mootinator indicado. Es posible que simplemente ignore la llamada al TryGetValue() y llame al GetValue() y verifique el resultado para nulo. No estoy seguro si arrojará una excepción ya que no la he probado, así que intente eso primero.

+4

Confirmó que el nuevo método GetValue() devolverá nulo si la clave no se encuentra en el contexto de enlace, por lo que no es necesario try/catch. –

5

Tuve este problema tratando de seguir el ejemplo de Hanselman el otro día. No es un ejemplo de MVC2. TryGetValue no funciona y ya no es necesario. Tratar este enlace:

http://forums.asp.net/p/1529895/3706154.aspx

creé un método de extensión del método MVC2 Geta de Hanselman para reemplazar, aunque no estoy seguro de si funciona como se esperaba, ya que no resolvió mi problema único, que didn En realidad, tiene algo que ver con la fecha o la hora.

public static T? GetA<T>(this ModelBindingContext bindingContext, string key) where T : struct 
     { 
      T? valueResult = null; 
      if (String.IsNullOrEmpty(key)) return null; 
      //Try it with the prefix... 
      try 
      { 
       valueResult = (T?)bindingContext.ValueProvider.GetValue(bindingContext.ModelName + "." + key).ConvertTo(typeof (T)); 
      } catch (NullReferenceException){} 
      //Didn't work? Try without the prefix if needed... 
      if (valueResult == null && bindingContext.FallbackToEmptyPrefix == true) 
      { 
       try 
       { 
        valueResult = (T?) bindingContext.ValueProvider.GetValue(key).ConvertTo(typeof (T)); 
       } catch (NullReferenceException){} 
      } 
      return valueResult; 
     } 
    } 
Cuestiones relacionadas