Проверка OnFieldChanging с использованием Linq-to-SQL и MVC - PullRequest
0 голосов
/ 16 сентября 2009

У меня есть следующие частичные методы в моем частичном классе, который присоединен к объекту в моей модели Liq to SQL.

Первая проверка правильности в каждом методе отлично работает для проверки правильности записи в каждом методе. Однако второй оператор if используется для проверки того, что пользователь установил хотя бы одно из полей, но методы никогда не вызываются, когда use оставляет эти поля пустыми. У меня есть некоторые проверки в тегах DataAnnotation, но я не могу использовать обязательный атрибут, потому что это сценарий «либо», либо «.

Есть ли способ придерживаться моего текущего шаблона проверки и получать этот вид проверки в модели? (План резервного копирования заключается в кодировании его в контроллере)

partial void OnTelChanging(string value)
        {
            if (!PhoneValidator.IsValidNumber(value))
                _errors.Add("Tel", "Telephone No must be a valid UK phone number.");


            if (String.IsNullOrEmpty(this.Mob) && String.IsNullOrEmpty(this.Tel))
            {
                _errors.Add("Tel", "You must enter at least one contact number.");
                _errors.Add("Mob", "");
            }
        }

        partial void OnMobChanging(string value)
        {
            if (!PhoneValidator.IsValidNumber(value))
                _errors.Add("Mob", "Mobile must be a valid UK phone number.");


            if (String.IsNullOrEmpty(this.Mob) && String.IsNullOrEmpty(this.Tel))
            {
                _errors.Add("Tel", "You must enter at least one contact number.");
                _errors.Add("Mob", "");
            }
        }





 [Bind(Include = "EthnicOriginID,CreatedByUserID,AddressID,CarefirstNumber,Title,Forename,Surname,Dob,Tel,Mob,GuardianName,Notes,Archived")]
    [MetadataType(typeof(CustomerMetaData))]
    public partial class Customer : IDataErrorInfo
    {
        private Dictionary<string, string> _errors = new Dictionary<string, string>();

        partial void OnTelChanging(string value)
        {
            if (!String.IsNullOrEmpty(value) && !PhoneValidator.IsValidNumber(value))
                _errors.Add("Tel", "Telephone No must be a valid UK phone number.");


            if (String.IsNullOrEmpty(this.Mob) && String.IsNullOrEmpty(this.Tel))
            {
                _errors.Add("Tel", "You must enter at least one contact number.");
                _errors.Add("Mob", "");
            }
        }

        partial void OnMobChanging(string value)
        {
            if (!String.IsNullOrEmpty(value) && !PhoneValidator.IsValidNumber(value))
                _errors.Add("Mob", "Mobile must be a valid UK phone number.");


            if (String.IsNullOrEmpty(this.Mob) && String.IsNullOrEmpty(this.Tel))
            {
                _errors.Add("Tel", "You must enter at least one contact number.");
                _errors.Add("Mob", "");
            }
        }

        #region ToString Override

        /// <summary>
        /// Returns a <see cref="System.String"/> that represents this instance.
        /// </summary>
        /// <returns>
        /// A <see cref="System.String"/> that represents this instance.
        /// </returns>
        public override string ToString()
        {
            return this.Surname + ", " + this.Forename;
        }

        #endregion ToString Override

        #region IDataErrorInfo Members

        public string Error
        {
            get
            {
                return string.Empty;
            }
        }

        public string this[string columnName]
        {
            get
            {
                if (_errors.ContainsKey(columnName))
                    return _errors[columnName];
                return string.Empty;
            }
        }

        #endregion
    }

    public class CustomerMetaData
    {
        #region EthnicOriginID

        [DisplayName("Ethnic Origin")]
        public int EthnicOriginID { get; set; }

        #endregion EthnicOriginID

        #region CreatedByUserID

        [DisplayName("Created By User")]
        [Required]
        public int CreatedByUserID { get; set; }

        #endregion CreatedByUserID

        #region AddressID

        [DisplayName("Address")]
        public int AddressID { get; set; }

        #endregion AddressID

        #region CarefirstNumber

        [DataType(DataType.Text)]
        [DisplayName("Carefirst Number")]
        [StringLength(8)]
        public string CarefirstNumber { get; set; }

        #endregion CarefirstNumber

        #region Title

        [DataType(DataType.Text)]
        [DisplayName("Title")]
        [StringLength(10)]
        public string Title { get; set; }

        #endregion Title

        #region Forename

        [DataType(DataType.Text)]
        [DisplayName("Forename")]
        [StringLength(25)]
        [Required]
        public string Forename { get; set; }

        #endregion Forename

        #region Surname

        [DataType(DataType.Text)]
        [DisplayName("Surname")]
        [StringLength(25)]
        [Required]
        public string Surname { get; set; }

        #endregion Surname

        #region Dob

        [DataType(DataType.DateTime)]
        [DisplayName("Dob")]
        public DateTime Dob { get; set; }

        #endregion Dob

        #region Tel

        [DataType(DataType.Text)]
        [DisplayName("Telephone No.")]
        [StringLength(11)]
        public string Tel { get; set; }

        #endregion Tel

        #region Mob

        [DataType(DataType.Text)]
        [DisplayName("Mobile")]
        [StringLength(11)]
        public string Mob { get; set; }

        #endregion Mob

        #region GuardianName

        [DataType(DataType.Text)]
        [DisplayName("Guardian Name")]
        [StringLength(50)]
        public string GuardianName { get; set; }

        #endregion GuardianName

        #region Notes

        [DataType(DataType.Text)]
        [DisplayName("Notes")]
        [StringLength(300)]
        public string Notes { get; set; }

        #endregion Notes
    }

Ответы [ 2 ]

2 голосов
/ 16 сентября 2009

Реализация IDataErrorInfo . Это будет делать то, что вы хотите, и MVC подхватит его автоматически.

1 голос
/ 18 сентября 2009

Событие onChange для этих свойств никогда не сработает. Вы должны проверить это учебное пособие из ASP.NET при проверке с уровнем обслуживания.

Вы можете использовать сервисный уровень в сочетании с аннотацией данных для любых сложных правил проверки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...