有沒有辦法覆蓋ModelState.IsValid
?阻止ModelState.IsValid驗證附加實體嗎?
有些要驗證的實體只是附屬實體,因此除ID之外的所有字段都不會被驗證,因爲實體處於Unchanged
狀態。
有沒有辦法做到這一點?
有沒有人遇到過這個問題?
更新
說我有以下作用:
[HttpPost]
public ActionResult SaveEntity(MyEntity entity)
{
var isValid = ModelState.IsValid; //false
}
由於模型驗證所有屬性和entity
所有後代的特性,必須有來檢查的每個實體的方式那些後代,無論它是否與上下文相關,並且如果是,則從ModelState
中刪除錯誤,如下所示:
public ActionResult TryValidateDetachedModel(MyEntity entity, DbContext context)
{
foreach (var ms in ModelState.Where(ms => ms.Value.Errors.Any()).ToArray())
// should iterate over something like GetAllEntityTypesMetadata()
{
var entity = GetEntityFromMetadata(ms);
if (context.Entry(entity).State == EntityState.Unchanged)
{
ms.Value.Errors.Clear();
}
}
}
我在上面的僞代碼中試圖做的是檢查驗證鏈中的實體,如果其中一個附加爲Unchanged
,請跳過驗證/刪除其錯誤。
現在我必須通過檢查ModelState.Key
來手動硬編碼,我正在尋找更通用和更高效的方法。
爲什麼你綁定到EF對象,而不是指定的視圖模型? – LukLed
我使用POCO實體,所以它沒有區別。 – Shimmy
顯然它有所不同,因爲在專用視圖模型中你不會有這個問題。 – LukLed