我的應用程序中有某些屬性需要動態設置,無論它們是否需要,因此我無法使用[必需的]數據註解的屬性。在MVC 3.0中,當設置IsRequired屬性的ModelMetadata時,它不會添加驗證
也許這不是實現我想要的最好方法。所以我會接受這方面的建議。 我已經覆蓋了DataAnnotationsModelMetadataProvider有:
public class DynamicFieldsMetadataProvider : DataAnnotationsModelMetadataProvider
{
public override IEnumerable<ModelMetadata> GetMetadataForProperties(object container, Type containerType)
{
if (containerType == null)
throw new ArgumentNullException("containerType");
if (!typeof(DynamicFieldDataItem).IsAssignableFrom(containerType))
foreach (var metadataProperty in base.GetMetadataForProperties(container, containerType))
yield return metadataProperty;
else
foreach (var metadataProperty in base.GetMetadataForProperties(container, containerType))
{
var dynamicField = (DynamicFieldDataItem)container;
if (metadataProperty.PropertyName == "DataFieldValue")
metadataProperty.IsRequired = dynamicField.IsRequired;
yield return metadataProperty;
}
}
}
這只是一個概念測試,一旦我做它的工作,我會改變它的東西充滿生機與活力多個對象,但到目前爲止,只有能夠設置屬性DataFieldValue的MetadataModel爲IsRequired = true我可以開始了。
有了這個,我在一個動態的方式成功設置IsRequired財產真實的(我想,這個就足夠了!),當我在我看來debugg:
@Html.EditorFor(model=>model.DataFieldValue)
酒店DataFieldValue聲明像這樣:
public class DynamicFieldDataItem
{
public string DataFieldValue { get; set; }
public bool IsRequired{ get; set; }
}
我可以看到,元數據,擁有財產的真實IsRequired,但是當「DataFieldValue」呈現了「驗證」是不存在的,當然還有驗證不起作用。
爲了確保我的項目配置沒有問題,我檢查了web.config,並且包含了用於驗證的javascripts,所有配置都已正確配置。更重要的是,如果我添加需要我的財產屬性,像這樣:
public class DynamicFieldDataItem
{
[Required]
public string DataFieldValue { get; set; }
public bool IsRequired{ get; set; }
}
驗證完美的作品!
任何人都可以給我一個提示嗎?或者告訴我我做錯了什麼?
謝謝!