我有一个这样的模型:
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 而不是提交?我能做些什么?
这是调试器的样子:
替代文字 http://www.freeimagehosting.net/uploads/f734f3d95d.png
编辑:额外信息....
我真的认为由于某种原因模型绑定没有发生。当我尝试这里找到的代码时:)
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 这样做是为了从 json 提交的数据中提取 POCO:
filterContext.ActionParameters[Param]
= jsSerializer.Deserialize(inputContent, JsonDataType);
我在这一行放了一个断点,order是有效的,加上order.OrderNumber有正确的值。
所以仍然没有解决,但希望这些额外的信息将有助于找到解决方案