Мне нужен простой способ обеспечить, чтобы некоторые свойства в классе содержали значения и/или находились в пределах диапазона (то есть: длиной не более 50 символов). Я использовал вопрос и ответ на вопрос How to validate Class properties?, к сожалению, я не смог заставить его работать.Как проверить требуемые поля в свойствах класса?
Чтобы проверить это, я создал очень простой пример WinForm с использованием C#. Несмотря на то, что я делаю все одинаково, он никогда не выдает исключение проверки, когда я применяю неверные значения (то есть: установка возраста выше допустимого предела).
Может кто-нибудь объяснить, почему это не исключение? Это как если бы класс не знал, что он должен использовать необходимые атрибуты.
Form1.cs
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.ComponentModel.DataAnnotations;
namespace RequiredFieldsInClassExample {
public partial class Form1 : Form {
public Form1() {
InitializeComponent();
}
private void btnTest_Click(object sender, EventArgs e) {
try {
lstStatus.Items.Clear();
lstStatus.Items.Add("Creating list of people");
List<Person> CollectionOfPeople = new List<Person>();
lstStatus.Items.Add("Creating a good person");
Person Jeff = new Person();
Jeff.Age = 33;
Jeff.Firstname = "Jeff";
Jeff.Lastname = "Jefferson";
Jeff.GroupCode = "JJJ";
CollectionOfPeople.Add(Jeff);
lstStatus.Items.Add("Creating a bad person");
Person Tim = new Person();
Tim.Age = 444;
Tim.Firstname = "";
Tim.Lastname = "";
Tim.GroupCode = "";
CollectionOfPeople.Add(Tim);
lstStatus.Items.Add("Done");
} catch (ValidationException Exp) {
MessageBox.Show(this, Exp.Message, "Validation Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
} catch (Exception Exp) {
MessageBox.Show(this, Exp.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
}
}
}
}
Person.cs
using System.ComponentModel.DataAnnotations;
public class Person {
private int m_iAge = 1;
private string m_sFirstname = "Unknown";
private string m_sLastname = "";
private string m_sGroupCode = "AAA";
//[Required(ErrorMessage = "Age is a required field.")]
//[Range(1, 100, ErrorMessage = "A persons age must be between 1 and 100.")]
[Required, Range(1, 100)]
public int Age
{
get { return m_iAge; }
set { m_iAge = value; }
}
//[Required(ErrorMessage = "Firstname is a required field.")]
[Required]
public string Firstname
{
get { return m_sFirstname; }
set { m_sFirstname = value; }
}
public string Lastname
{
get { return m_sLastname; }
set { m_sLastname = value; }
}
//[StringLength(3)]
public string GroupCode
{
get { return m_sGroupCode; }
set { m_sGroupCode = value; }
}
}
Это не собирается проверять свойства при установке значений, вы должны [спусковой проверку вручную] (http://odetocode.com/blogs/scott/archive/2011/ 06/29/ручная проверка-с-данных annotations.aspx). – Michael
@Michael - Можете ли вы создать ответ, так как ваша ссылка содержит информацию, которая позволила мне решить проблему? – ThePeter
Вы также можете опубликовать свой собственный ответ и самостоятельно принять его после задержки, если никаких других ответов недостаточно. Это ответит на вопрос, который поможет будущим читателям. – Tim