Ich versuche, zu ASP.Net MVC 2 zu migrieren und einige Probleme zu treffen. Hier ist eine: Ich musste direkt ein Dictionary als Ergebnis einer Ansicht Post binden.MVC 2, IModelBinder & ValueProvider ändert sich
In ASP.Net MVC 1 es funktionierte perfekt einem benutzerdefinierten IModelBinder mit:
/// <summary>
/// Bind Dictionary<int, int>
///
/// convention : <elm name="modelName_key" value="value"></elm>
/// </summary>
public class DictionaryModelBinder : IModelBinder
{
#region IModelBinder Members
/// <summary>
/// Mandatory
/// </summary>
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
IDictionary<int, int> retour = new Dictionary<int, int>();
// get the values
var values = bindingContext.ValueProvider;
// get the model name
string modelname = bindingContext.ModelName + '_';
int skip = modelname.Length;
// loop on the keys
foreach(string keyStr in values.Keys)
{
// if an element has been identified
if(keyStr.StartsWith(modelname))
{
// get that key
int key;
if(Int32.TryParse(keyStr.Substring(skip), out key))
{
int value;
if(Int32.TryParse(values[keyStr].AttemptedValue, out value))
retour.Add(key, value);
}
}
}
return retour;
}
#endregion
}
Es in Paar mit einigen intelligenten HtmlBuilder gearbeitet, die Wörterbuch der Daten angezeigt.
Das Problem, das ich jetzt treffen ist, dass Valueprovider ist kein Wörterbuch <> mehr, es ist ein IValueProvider ist, die nur erlauben Werte zu erhalten, dessen Name
public interface IValueProvider
{
bool ContainsPrefix(string prefix);
ValueProviderResult GetValue(string key);
}
Dieses bekannt ist, ist wirklich nicht cool, wie ich kann nicht führen meine intelligente Parsing ...
Frage:
- gibt es einen anderen Weg, um alle Schlüssel zu bekommen?
- Kennen Sie einen anderen Weg, um eine Sammlung von HTML-Elementen zu einem Wörterbuch
Vielen Dank für Ihre Anregungen
O.
Siehe hier: http://stackoverflow.com/questions/2290473/ivalueprovider-in-mvc-2-rc-2/2290520 # 2290520 – tvanfosson