У меня есть такая модель:
public PurchaseOrder 
{
    [Required] [StringLength(15)]
    public virtual string OrderNumber {get;set;}
    // etc.        
}
Когда я отправляю заказ из представления (используя $.post, а не input type = submit), он переходит к моему классу контроллера:
public class PurchaseOrderController
{
    public JsonResult Save(PurchaseOrder order)
    {
        // TryUpdateModel(order); // commented out since modelstate.isvalid remains false anyway
        if (ModelState.IsValid)
        {
            // its never valid 
        }
    }
}
ModelState.IsValid всегда возвращает false, с ошибкой: "Поле" Номер заказа "требуется". Но в этом поле есть значение (почему)
Почему бы ему сказать, что "значение требуется", когда оно имеет значение? Я что-то пропустил? Это из-за $.post вместо submit? Что я могу сделать?
Вот что выглядит отладчик:
alt text http://www.freeimagehosting.net/uploads/f734f3d95d.png
EDIT: дополнительная информация....
Я действительно думаю, что по какой-то причине привязка к модели не происходит. Когда я попробую этот код найти здесь:)
if (!ModelState.IsValid)
{
    ModelState.Clear();
    ModelMetadata modelMetadata = ModelMetadataProviders.Current.GetMetadataForType(() => order, order.GetType());
    ModelValidator compositeValidator = ModelValidator.GetModelValidator(modelMetadata, base.ControllerContext);
    foreach (ModelValidationResult result in compositeValidator.Validate(null))
    {
        this.ModelState.AddModelError(result.MemberName, result.Message);
    }
}
Затем ModelState.IsValid = true. compositeValidator.Validate() возвращает 0 ошибок. Я думаю, это означает, что модель не была связана, но я до сих пор не знаю почему.
Метод контроллера на самом деле выглядит следующим образом (я пропустил фильтр при первоначальном написании этого вопроса)
[JsonFilter(Param = "order", JsonDataType = typeof(PurchaseOrder))] 
public JsonResult Save(PurchaseOrder order) { //  etc ... }
И JsonFilter делает это, чтобы извлечь POCO из предоставленных json данных:
filterContext.ActionParameters[Param] 
    = jsSerializer.Deserialize(inputContent, JsonDataType);
Я положил точку останова на эту строку, и порядок действителен, плюс order.OrderNumber имеет правильное значение.
Так что все еще не разрешено, но, надеюсь, эта дополнительная информация поможет найти решение
