J'ai un classeur de modèle personnalisé qui prend une liste séparée par des virgules et supprime toutes les valeurs vides, puis le transmet au classeur par défaut . Cela a fonctionné dans ASP.NET MVC Preview 2, mais quand j'ai mis à niveau vers RC2, le ci-dessous ne compilera pas parce que l'interface de ValueProvider a seulement une méthode GetValue(), aucun accesseur []. Est ce que je fais ci-dessous possible à travers un autre mécanisme dans le contexte de liaison? Je préfère ne pas avoir à créer un classeur modèle complet pour une situation aussi simple. L'objectif principal est lorsque les valeurs sont liées à une liste <SomeEnum>, toutes les valeurs vides sont ignorées.Comment mettre à jour ModelBinder personnalisé pour travailler avec l'interface ModelBindingContext.ValueProvider modifiée dans ASP.NET MVC RC2
public class EnumListModelBinder : IModelBinder
{
public object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var result = bindingContext.ValueProvider[bindingContext.ModelName];
string[] rawValues = (string[])result.RawValue;
var newValues = new List<string>();
foreach (string value in rawValues)
{
if (!String.IsNullOrEmpty(value))
{
newValues.Add(value);
}
}
string newValuesAttempted = String.Join(",", newValues.ToArray());
// overwrite the ValueProviderResult with the cleaned up csv list
// this is the part I'm not sure how to implement using the interface
bindingContext.ValueProvider[bindingContext.ModelName] =
new ValueProviderResult(newValues.ToArray(), newValuesAttempted, result.Culture);
return System.Web.Mvc.ModelBinders.Binders.DefaultBinder.BindModel(controllerContext, bindingContext);
}
}
Ce n'est pas la partie que la modification de l'interface ne me permet pas de faire. C'est la 2ème à la dernière ligne où j'écrase le résultat dans la collection ValueProvider – JeremyWeir
En ce qui concerne la distribution, j'utilise uniquement ce modèle de classeur pour les propriétés que je connais les données de formulaire seront conformes – JeremyWeir
Vous devez mettre à jour la * source * spécifique du valeur (par exemple, controllerContext.HttpContext.Request.QueryString [quelque chose] –