2010-11-10 4 views
8

Nella mia applicazione, sto provando a dividere il campo Data e ora da e DateTime in modo da poter inserire un selettore di date jQuery nella data. Ho trovato Hanselman's code for splitting the DateTime, tuttavia ottengo un errore di compilazione su bindingContext.ValueProvider.TryGetValue(modelName, out valueResult);. L'errore che ottengo è:ValueProvider non contiene una definizione per TryGetValue

errore 3 'System.Web.Mvc.IValueProvider' non contiene una definizione per 'TryGetValue' e nessun metodo di estensione 'TryGetValue' accettare un primo argomento di tipo 'System.Web. Mvc.IValueProvider 'potrebbe essere trovato (ti manca una direttiva using o un riferimento all'assembly?) C: \ Documents and Settings \ xxx \ Documenti \ Visual Studio 2008 \ Projects \ MyProject \ Projecters \ DateAndTimeModelBinder.cs 83 42 Project

Cosa mi sfugge qualcosa? Ho creato una nuova classe e ho inserito il suo codice in una cartella Helpers nel mio progetto.

+0

possiamo modificare il titolo per essere più precisi? 'IValueProvider non contiene una definizione per TryGetValue' o qualcosa del genere? Posso cambiarlo? Aiuterà gli altri a trovare la tua domanda per la precisione. – jcolebrand

+0

L'ho cambiato. –

risposta

14

TryGetValue() non è membro di System.Web.Mvc.IValueProvider. Ho il sospetto che ha un'estensione personalizzata che sembra qualcosa di simile:

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

Aggiornamento

TryGetValue() non è un metodo di estensione, ma piuttosto si tratta di un metodo del tipo IDictionary <T,U>. Il tipo di bindingContext.ValueProvider è stato modificato da MVC1 come indicato da @mootinator. È possibile ignorare semplicemente la chiamata a TryGetValue() e chiamare invece GetValue() e verificare il risultato per null. Non sono sicuro che genererà un'eccezione perché non l'ho provata, quindi provatela prima.

+4

Confermato che il nuovo metodo GetValue() restituirà null se la chiave non viene trovata nel contesto di binding, quindi il try/catch non è necessario. –

5

Ho avuto questo problema cercando di seguire l'esempio di Hanselman l'altro giorno. Non è un esempio MVC2. TryGetValue non funziona e/o non è più necessario. Prova questo link:

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

ho creato un metodo di estensione MVC2 dal metodo Geta di Hanselman di sostituire, anche se non sono sicuro se funziona come previsto, dal momento che non ha risolto il mio problema unico, che didn In realtà hanno qualcosa a che fare con la data o l'ora.