Asp.net mvc onfield使用Linq将验证更改为SQL和MVC

Asp.net mvc onfield使用Linq将验证更改为SQL和MVC,asp.net-mvc,linq-to-sql,Asp.net Mvc,Linq To Sql,在我的分部类中有以下分部方法,该分部类附加到我的Liq-to-SQL模型中的一个对象 每个方法中的第一个验证检查可以很好地检查每个方法中的有效条目。但是,第二个if语句用于检查用户是否设置了至少一个字段,但是当use将这些字段保留为空时,不会实际调用这些方法。我在DataAnnotation标记中有一些验证,但我不能使用必需的属性,因为这是一个“非此即彼”的场景 有没有办法坚持我目前的验证模式,并将这种验证应用到模型中?(备份计划是在控制器中对其进行编码) 部分无效OnTelChanging(字

在我的分部类中有以下分部方法,该分部类附加到我的Liq-to-SQL模型中的一个对象

每个方法中的第一个验证检查可以很好地检查每个方法中的有效条目。但是,第二个if语句用于检查用户是否设置了至少一个字段,但是当use将这些字段保留为空时,不会实际调用这些方法。我在DataAnnotation标记中有一些验证,但我不能使用必需的属性,因为这是一个“非此即彼”的场景

有没有办法坚持我目前的验证模式,并将这种验证应用到模型中?(备份计划是在控制器中对其进行编码)

部分无效OnTelChanging(字符串值)
{
如果(!PhoneValidator.IsValidNumber(值))
_错误。添加(“电话”,“电话号码必须是有效的英国电话号码。”);
if(String.IsNullOrEmpty(this.Mob)和&String.IsNullOrEmpty(this.Tel))
{
_错误。添加(“电话”,“您必须输入至少一个联系人号码”);
_错误。添加(“Mob”和“);
}
}
更改对象时部分无效(字符串值)
{
如果(!PhoneValidator.IsValidNumber(值))
_错误。添加(“Mob”,“Mobile必须是有效的英国电话号码。”);
if(String.IsNullOrEmpty(this.Mob)和&String.IsNullOrEmpty(this.Tel))
{
_错误。添加(“电话”,“您必须输入至少一个联系人号码”);
_错误。添加(“Mob”和“);
}
}
[Bind(包括=“EthnicOriginID,CreatedByUserID,AddressID,CarefirstNumber,Title,forname,姓氏,Dob,Tel,Mob,GuardianName,Notes,归档”)]
[元数据类型(typeof(CustomerMetaData))]
公共部分类客户:IDataErrorInfo
{
专用词典_errors=新词典();
部分无效OnTelChanging(字符串值)
{
如果(!String.IsNullOrEmpty(值)&&!PhoneValidator.IsValidNumber(值))
_错误。添加(“电话”,“电话号码必须是有效的英国电话号码。”);
if(String.IsNullOrEmpty(this.Mob)和&String.IsNullOrEmpty(this.Tel))
{
_错误。添加(“电话”,“您必须输入至少一个联系人号码”);
_错误。添加(“Mob”和“);
}
}
更改对象时部分无效(字符串值)
{
如果(!String.IsNullOrEmpty(值)&&!PhoneValidator.IsValidNumber(值))
_错误。添加(“Mob”,“Mobile必须是有效的英国电话号码。”);
if(String.IsNullOrEmpty(this.Mob)和&String.IsNullOrEmpty(this.Tel))
{
_错误。添加(“电话”,“您必须输入至少一个联系人号码”);
_错误。添加(“Mob”和“);
}
}
#区域到字符串覆盖
/// 
///返回表示此实例的。
/// 
/// 
///表示此实例的。
/// 
公共重写字符串ToString()
{
返回此。姓+“,”+此。名;
}
#结束区域到字符串覆盖
#区域IDataErrorInfo成员
公共字符串错误
{
得到
{
返回字符串。空;
}
}
公共字符串此[string columnName]
{
得到
{
if(_errors.ContainsKey(columnName))
返回_错误[columnName];
返回字符串。空;
}
}
#端区
}
公共类CustomerMetaData
{
#民族起源区
[显示名称(“人种”)]
public int EthnicOriginID{get;set;}
#端区人种起源
#区域创建DbyUserID
[显示名称(“由用户创建”)]
[必需]
public int CreatedByUserID{get;set;}
#endregion CreatedByUserID
#区域地址ID
[显示名称(“地址”)]
public int AddressID{get;set;}
#端域地址ID
#地区号码
[数据类型(DataType.Text)]
[显示名称(“第一个号码”)]
[第(8)款]
公共字符串CarefirstNumber{get;set;}
#endregion CarefirstNumber
#地区名称
[数据类型(DataType.Text)]
[显示名称(“标题”)]
[条次建议修正案(10)]
公共字符串标题{get;set;}
#端域标题
#地区名称
[数据类型(DataType.Text)]
[显示名称(“名字”)]
[第25段]
[必需]
公共字符串名{get;set;}
#端域名
#地域姓氏
[数据类型(DataType.Text)]
[显示名称(“姓氏”)]
[第25段]
[必需]
公共字符串姓氏{get;set;}
#端部姓氏
#区域Dob
[数据类型(数据类型.日期时间)]
[显示名称(“Dob”)]
公共日期时间Dob{get;set;}
#端区Dob
#地区电话
[数据类型(DataType.Text)]
[显示名称(“电话号码”)
[条次建议修正案(11)]
公共字符串Tel{get;set;}
#endregion电话
#地区暴徒
[数据类型(DataType.Text)]
[显示名称(“移动”)]
[条次建议修正案(11)]
公共字符串Mob{get;set;}
#端区暴徒
#地区名称
[数据类型(DataType.Text)]
[显示名称(“监护人姓名”)]
[长度(50)]
公共字符串GuardianName{get;set;}
#endregion GuardianName
#地区注释
[数据类型(DataType.Text)]
[显示名称(“注释”)]
[长度(300)]
公共字符串注释{get;set;}
#尾端区域注释
}
。这将执行您想要的操作,MVC会自动选择它。

。这将实现您想要的功能,MVC会自动获取它
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
    }