我正在實現一個ModelValidator,它需要從正在執行的操作中反射信息。驗證行爲將根據動作的裝飾方式而改變。我可以得到這些信息嗎?從ModelValidator獲取操作信息
-1
A
回答
1
ModelValidator的構造函數應該接受ControllerContext。您可以使用該對象確定哪些屬性控制器裝飾有像這樣:
context.Controller.GetType().GetCustomAttributes(typeof(YourAttribute), true).Length > 0
編輯:
您也可以像這樣所有屬性的列表:
attributes = context.Controller.GetType().GetCustomAttributes(true);
所以,用於驗證基於特定屬性的簡單示例:
public class SampleValidator : ModelValidator {
private ControllerContext _context { get; set; }
public SampleValidator(ModelMetadata metadata, ControllerContext context,
string compareProperty, string errorMessage) : base(metadata, context) {
_controllerContext = context;
}
public override IEnumerable<ModelValidationResult> Validate(object container) {
if (_context.Controller.GetType().GetCustomAttributes(typeof(YourAttribute), true).Length > 0) {
// do some custom validation
}
if (_context.Controller.GetType().GetCustomAttributes(typeof(AnotherAttribute), true).Length > 0) {
// do something else
}
}
}
}
0
反編譯System.Web.Mvc後,我明白了:
protected override IEnumerable<ModelValidator> GetValidators(ModelMetadata metadata, ControllerContext context, IEnumerable<Attribute> attributes)
{
ReflectedControllerDescriptor controllerDescriptor = new ReflectedControllerDescriptor(context.Controller.GetType());
ReflectedActionDescriptor actionDescriptor = (ReflectedActionDescriptor) controllerDescriptor.FindAction(context, context.RouteData.GetRequiredString("action"));
object[] actionAttributes = actionDescriptor.GetCustomAttributes(typeof(MyAttribute), true);
}
+0
Eduardo:關於您的主持人迴應,您不必將整個博客條目放入您的答案中。只是總結您的博客條目的重要細節,並提供一個鏈接。裸鏈接(沒有摘要)的答案有幾個問題;他們看起來像垃圾郵件,他們遭受鏈接腐爛。 –
相關問題
- 1. 如何從操作的MethodInfo獲取MVC操作信息?
- 2. 用Postgresql獲取系統操作信息
- 3. 從rails中獲取控制器和操作信息
- 4. 從4個表中獲取信息並操作它?
- 5. 通過Google上的操作從ID令牌獲取信息?
- 6. 從remoteView獲取信息?
- 7. 從圖像獲取信息
- 8. 從「QWidget」獲取信息
- 9. 從AlertDialog獲取信息
- 10. 從json sting獲取信息
- 11. 從perl獲取ini信息
- 12. 從privatevoid獲取信息
- 13. 從Stormpath獲取信息?
- 14. 從mySQL Tabel獲取信息
- 15. 從URL獲取信息
- 16. jQuery從url獲取信息
- 17. 從按鈕獲取信息
- 18. 從iFrame獲取信息(document.getElementById)
- 19. 從網頁獲取信息
- 20. 從claimsidentity獲取組信息
- 21. 獲取信息從PHP
- 22. 從SVN獲取信息
- 23. 從DataGridView中獲取信息
- 24. 從MySQL獲取信息
- 25. 從restfb獲取信息
- 26. 從.xml獲取信息
- 27. 獲取信息從TMDB
- 28. 從API獲取信息javascript
- 29. 從Facebook獲取信息圖
- 30. 獲取信息
我們幾乎沒有。我需要獲得執行操作的裝飾屬性。 – Eduardo
查看編輯答案。 – gram
返回控制器的所有屬性。哪種方法? – Eduardo