J'ai écrit liant modèle personnalisé dans le projet, qui utilise ASP.NET MVC 2. Cette liaison liant le modèle à 2 champs de modèle:Unité modèle de liaison test personnalisé dans 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);
}
}
Comment puis-je tester ce classeur modèle en utilisant Standart VS tests unitaires? Passé quelques heures googling, trouver quelques exemples (http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx), mais cet exemple est pour MVC1, et ne fonctionne pas lorsque vous utilisez MVC2.
J'apprécie votre aide.
Votre réponse m'a évité de me perdre dans la source MVC. J'ai essayé de faire la même mise à jour et suis arrivé avec presque le même résultat. Malheureusement, je ne définissais pas le 'ModelMetaData' sur le' ModelBindingContext'. Sans cela, vous obtenez un NondReferenceException quelconque sur 'BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext)'. – patridge
Merci pour ça. Il a nettoyé quelques choses pour moi gentiment. –
J'étais sur le point de créer un ValueProvider personnalisé, mais grâce au NameValueCollectionValueProvider que vous avez mentionné. C'était utile. Merci. – Mani