为什么IValidatableObject方法Validate()有validationContext的参数?

时间:2018-01-18 23:28:07

标签: c# asp.net-mvc

在ASP.NET MVC中,我可以让模型继承自IValidatableObject,在这种情况下我必须实现from bokeh.models import ( GMapPlot, GMapOptions, ColumnDataSource, Circle, DataRange1d, PanTool, WheelZoomTool, BoxSelectTool ) from bokeh.io import output_file, show, output_notebook output_notebook() map_options = GMapOptions(lat=30.29, lng=-97.73, map_type="roadmap", zoom=11) plot = GMapPlot( x_range=DataRange1d(), y_range=DataRange1d(), map_options=map_options ) plot.title.text = "Austin" plot.api_key = "INSERT PERSONAL GOOGLE API KEY" completed_lats = [30.265872,30.2900002] completed_longs = [-97.749270,-97.733322] completed_source = ColumnDataSource( data=dict( lat=completed_lats, lon=completed_longs,)) completed_dots = Circle(x="lon", y="lat", size=50, fill_color="blue", fill_alpha=0.1, line_color=None) plot.add_glyph(completed_source, completed_dots) plot.add_tools(PanTool(), WheelZoomTool(), BoxSelectTool()) show(plot)

为什么这个方法有参数validationContext?我可以使用关键字'这个&#39 ;?来引用会员使用validationContext有什么好处吗?

1 个答案:

答案 0 :(得分:2)

System.IServiceProvider提供了可用于更复杂验证的其他属性和方法,这些验证可能与不属于模型的值相关联。例如,您可能希望验证模型的属性在数据库中是唯一的,因此您可以将服务(实现ValidationContext)注入IServiceProvider构造函数,或者添加包含其他内容的字典使用this overload进行验证的值,您可以在Validator.TryValidateValue()方法中使用该值。

this Gist中显示了在mvc项目中添加ValidationContextIValidatableObject的示例。

作为旁注,实现IClientValidatable只会为您提供服务器端验证,您确实应该使用实现text的验证属性来为您提供客户端验证。如果内置属性不合适,那么您可以按照The Complete Guide To Validation In ASP.NET MVC 3 - Part 2中的讨论创建自己的属性。