我有這樣一個模型:ASPNET MVC - 爲什麼ModelState.IsValid爲false「該字段是必需的」當該字段確實有值時?
public PurchaseOrder
{
[Required] [StringLength(15)]
public virtual string OrderNumber {get;set;}
// etc.
}
當我從視圖提交訂單(使用.post的$,而不是輸入類型=提交),它進入我的控制器類:
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而不是提交?我能做什麼?
這是調試器的樣子:
alt text 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);
}
}
Then 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.OrderNumber具有正確的值。
所以仍然沒有得到解決,但希望這額外的信息將與尋找解決
爲什麼房產標記爲虛擬?你在使用POCO變更追蹤嗎? – 2010-05-08 02:43:17
什麼是價值?你如何使用'$ .post'?它與正常提交一起工作嗎? – 2010-05-08 14:08:35
我不知道爲什麼它是虛擬的,這是當我開始在現有的應用程序工作。 – 2010-05-11 03:29:46