2010-11-10 4 views
8

In meiner Anwendung versuche ich das Datum und Uhrzeit von und DateTime Feld zu teilen, so dass ich eine jQuery Datumsauswahl auf das Datum setzen kann. Ich habe Hanselman's code for splitting the DateTime gefunden, jedoch bekomme ich einen Kompilierfehler auf bindingContext.ValueProvider.TryGetValue(modelName, out valueResult);. Der Fehler, den ich bekommen ist:ValueProvider enthält keine Definition für TryGetValue

Fehler 3 ‚System.Web.Mvc.IValueProvider‘ enthält keine Definition für ‚TryGetValue‘ und keine Erweiterungsmethode ‚TryGetValue‘ ein erstes Argument vom Typ ‚System.Web zu akzeptieren. Mvc.IValueProvider 'könnte gefunden werden (fehlt eine using-Direktive oder eine Assemblyreferenz?) C: \ Dokumente und Einstellungen \ xxx \ Eigene Dateien \ Visual Studio 2008 \ Projekte \ MeinProjekt \ Projekt \ Helfer \ DateAndTimeModelBinder.cs 83 42 Projekt

Was vermisse ich etwas? Ich habe eine neue Klasse erstellt und seinen Code in einen Helfer-Ordner in meinem Projekt eingefügt.

+0

können wir den Titel ändern, um genauer zu sein? 'IValueProvider enthält keine Definition für TryGetValue' oder so? Darf ich es ändern? Wird anderen helfen, Ihre Frage auf Genauigkeit zu finden. – jcolebrand

+0

Ich habe das geändert. –

Antwort

14

TryGetValue() ist kein Mitglied von System.Web.Mvc.IValueProvider. Ich vermute, dass er eine benutzerdefinierte Erweiterung hat, die wie etwas aussieht:

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

aktualisieren

TryGetValue() ist keine Erweiterung Methode, sondern es ist ein Verfahren nach Art IDictionary <T,U>. Der Typ bindingContext.ValueProvider hat sich seit MVC1 geändert, da @mootherator angezeigt wird. Es ist möglich, dass Sie einfach den Anruf an TryGetValue() ignorieren und stattdessen GetValue() aufrufen und das Ergebnis auf null überprüfen können. Ich bin mir nicht sicher, ob es eine Ausnahme auslösen wird, da ich es nicht getestet habe, also versuche es zuerst.

+4

Bestätigt, dass die neue GetValue() -Methode null zurückgibt, wenn der Schlüssel nicht im Bindungskontext gefunden wird. Daher wird try/catch nicht benötigt. –

5

Ich hatte dieses Problem versucht, Hanselman Beispiel neulich zu folgen. Es ist kein MVC2-Beispiel. TryGetValue funktioniert nicht und/oder wird nicht mehr benötigt. Versuchen Sie diesen Link:

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

ich eine MVC2 Erweiterungsmethode von Hanselman Geta Methode erstellt zu ersetzen, obwohl ich nicht sicher bin, ob es wie vorgesehen funktioniert, da es nicht mein einzigartiges Problem zu lösen, die didn habe eigentlich nichts mit Datum oder Zeit zu tun.

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; 
     } 
    }