Guest User

Untitled

a guest
Jul 21st, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.88 KB | None | 0 0
  1. public class Inner
  2. {
  3. [Range(10, 20)]
  4. public int InnerProperty { get; set; }
  5. }
  6. public class Outer
  7. {
  8. public Outer()
  9. {
  10. Inner = new Inner();
  11. }
  12. public Inner Inner { get; set; }
  13. [Range(10, 20)]
  14. public int OuterProperty { get; set; }
  15. }
  16.  
  17. public class TestModelBinder : DefaultModelBinder
  18. {
  19.  
  20. public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
  21. {
  22. if (bindingContext.ModelType == typeof(Outer))
  23. {
  24. Outer outer = new Outer();
  25.  
  26. //Three different tests here:
  27.  
  28. //outer.OuterProperty = 15;
  29. //outer.Inner.InnerProperty = 5; - this is suposed to be an error, but its not
  30. // For above configuration, ModelState.Keys.Count = 0
  31.  
  32. //outer.OuterProperty = 5;
  33. //outer.Inner.InnerProperty = 5; - this is suposed to be an error, but its not
  34. // For above configuration, ModelState.Keys.Count = 1 ( OuterProperty)
  35.  
  36. outer.OuterProperty = 15;
  37. outer.Inner.InnerProperty = 15;
  38. // For above configuration, ModelState.Keys.Count = 0
  39.  
  40. ModelBindingContext newBindingContext = new ModelBindingContext()
  41. {
  42. ModelMetadata = ModelMetadataProviders.Current.GetMetadataForType(
  43. () => outer,
  44. typeof(Outer)
  45. ),
  46. ModelState = bindingContext.ModelState,
  47. ValueProvider = bindingContext.ValueProvider
  48. };
  49. return base.BindModel(controllerContext, newBindingContext);
  50. }
  51. else
  52. {
  53. return base.BindModel(controllerContext, bindingContext);
  54. }
  55. }
  56. }
  57.  
  58. ModelBinders.Binders[typeof(Outer)] = new TestModelBinder();
  59.  
  60. [HttpPost]
  61. public ActionResult Test(Outer tme)
  62. {
  63. bool isValid = ModelState.IsValid;
  64. return View();
  65. }
Add Comment
Please, Sign In to add comment