Начиная с ASP.Net MVC 2 Preview 1, теперь мы получаем поддержку проверки DataAnnotation из коробки, поэтому я предполагаю, что ваша проблема в том, что при запуске логики ModelBinder она применяет правила DataAnnotation:
public ActionResult Index(BlogPost b) //Create BlogPost object and apply rules
и затем с вашей логикой XVal вы снова запрашиваете проверку:
var errors = DataAnnotationsValidationRunner.GetErrors(post);
Это подтверждается тем фактом, что они повторяются в одном и том же порядке.
Ваш код работал бы нормально в версии 1 MVC, так как public ActionResult Index (BlogPost b) не будет запускать правила DataAnnotation. Я нигде не читал, если есть возможность отключить новую логику DataAnnotation и просто использовать XVal.
Подробнее об этом можно узнать на Предварительный просмотр сообщения Скотта 1
Чтобы выяснить, что является первым элементом, выполнить debug и проверить, какие ошибки есть в ModelState, поскольку это скажет вам, с каким свойством объекта связаны ошибки.
[HttpPost]
public ActionResult Index(BlogPost b)
{
try
{
_blogService.Insert(b); //Add breakpoint here and check ModelState
}
catch (RulesException ex)
{
ex.AddModelStateErrors(ModelState, "");
}
return (View(b));
}