数据注释不适用于自定义模型

时间:2016-07-08 19:58:21

标签: c# asp.net data-annotations

我阅读并使用下面的代码将其设置为模型列表,我的问题是虽然我已经为我的模型(城市)定义了数据注释属性,但它不起作用。

例如,这里有3行csv文件:

CityName    CityCode    DistrictName    ZipCode
Adana   121 Alada?  1720
Adana   1   Ceyhan  1920
Adana   1   Ceyhan  1930

我预计在第一行会发生异常,因为城市代码是“121”,必须在1-81之间。我也试过ModelState.IsValid;对于我的情况,它总是返回true。如何保证此字段在有效范围内?

public List<City> readFileToList(string filename, params KeyValuePair<string, object>[] queryparams)
{
    string fullName = Path.Combine(HttpRuntime.AppDomainAppPath, "App_Data", filename);
    string[] lines = System.IO.File.ReadAllLines(fullName);
    List<City> cities = lines.Skip(1).Select(l => new City
    {
        name = l.Split(',')[0],
        cityCode = Convert.ToInt32(l.Split(',')[1]),
        district = l.Split(',')[2],
        zipCode = l.Split(',')[3],
    }).ToList();
    return cities;
}

这是模型定义:

public class City
    {
        [Required]
        [StringLength(50)]
        public string name { get; set; }

        [Required]
        [Range(0,81)]
        public int cityCode { get; set; }

        [Required]
        [StringLength(60)]
        public string district { get; set; }

        [Required]
        [Range(0, 99999)]
        public string zipCode { get; set; }
    }

1 个答案:

答案 0 :(得分:0)

没有代码可以查看您的课程有效或现在的天气。你可以这样写:

public bool ValidateCity(City city,out List<ValidationResult> results)    
{
    var context = new ValidationContext(city);
    results = new List<ValidationResult>();

    return Validator.TryValidateObject(city, context, results, true);
}

如果此方法为true,则可以抛出异常,并且还可以查看模型在结果中无效的原因