ho scritto modello personalizzato legante in progetto, che utilizza ASP.NET MVC 2. Questo modello legante si legano solo 2 campi del modello:Unità modello di test personalizzato legante 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);
}
}
Come posso testare questo legante modello usando il test unitario VS? Abbiamo trascorso alcune ore su google, trovando esempi di coppie (http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx), ma questi esempi sono per MVC1 e non funzionano quando si utilizza MVC2.
Apprezzo il vostro aiuto.
La tua risposta mi ha salvato dall'aggirarmi nella sorgente MVC. Ho provato a fare lo stesso aggiornamento e ho prodotto quasi lo stesso risultato. Sfortunatamente, non stavo impostando 'ModelMetaData' su' ModelBindingContext'. Senza di esso, si ottiene un 'NullReferenceException 'non ben definito in' BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext) '. – patridge
Grazie per questo. Ha chiarito alcune cose per me bene. –
Stavo per creare un ValueProvider personalizzato, ma grazie al NameValueCollectionValueProvider che hai menzionato. Questo è stato utile. Grazie. – Mani