Ich habe geschrieben benutzerdefinierten Modell Binder in Projekt, das ASP.NET MVC 2. binden Dieses Modell Bindemittel verwendet nur 2 Felder des Modells:Unit-Tests benutzerdefinierten Modell Binder in ASP.NET MVC 2
public class TaskFormBinder : DefaultModelBinder
{
protected override void BindProperty(ControllerContext controllerContext,
ModelBindingContext bindingContext,
PropertyDescriptor propertyDescriptor)
{
if (propertyDescriptor.Name == "Type")
{
var value = bindingContext.ValueProvider.GetValue("Type");
var typeId = value.ConvertTo(typeof(int));
TaskType foundedType;
using (var nhSession = Domain.GetSession())
{
foundedType = nhSession.Get<TaskType>(typeId);
}
if (foundedType != null)
{
SetProperty(controllerContext, bindingContext, propertyDescriptor, foundedType);
}
else
{
AddModelBindError(bindingContext, propertyDescriptor);
}
return;
}
if (propertyDescriptor.Name == "Priority")
{ /* Other field binding ... */
return;
}
base.BindProperty(controllerContext, bindingContext, propertyDescriptor);
}
}
Wie Kann ich diesen Modellbinder mit Standard-VS-Unit-Tests testen? Habe einige Stunden gegoogelt, paar Beispiele gefunden (http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx), aber dieses Beispiel ist für MVC1 und funktioniert nicht, wenn MVC2 verwendet wird.
Ich schätze Ihre Hilfe.
Ihre Antwort hat mich davor bewahrt, in der MVC-Quelle herumzudummeln. Ich habe versucht, das gleiche Update zu machen und kam fast zu dem gleichen Ergebnis. Leider habe ich 'ModelMetaData' nicht auf' ModelBindingContext' gesetzt. Ohne es erhalten Sie eine unbestimmte "NullReferenceException" auf "BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext)". – patridge
Danke dafür. Es hat mir einige Dinge klargemacht. –
Ich wollte gerade einen benutzerdefinierten ValueProvider erstellen, aber dank des von Ihnen erwähnten NameValueCollectionValueProvider. Das war nützlich. Vielen Dank. – Mani