簡體   English   中英

ASP.NET MVC數據注釋自定義屬性不起作用

[英]Asp.Net MVC data annotation custom attribute is not working

我需要實現cusotm屬性,然后使用asp.net數據注釋來驗證類。 不幸的是,在運行時沒有調用屬性類。 請幫幫我。 非常感謝。 下面是源代碼。

using System;
using System.Collections.Generic;
using CaseMgr.Model.Base;

using System.Linq;
using System.ComponentModel.DataAnnotations;

namespace CaseMgr.Model.BusinessObjects
{
    public partial class PatLiverException : BusinessBase<decimal>, IComparable<PatLiverException>, IEquatable<PatLiverException>
    {
        private LiverExcepDisease _liverExcepDisease = null;
        private DateTime _sccApprovalDate = new DateTime();

        public PatLiverException() { }

        public virtual LiverExcepDisease LiverExcepDisease
        {
            get { return _liverExcepDisease; }
            set { _liverExcepDisease = value; }
        }

        [SccApprovalDateValidate("SccApprovalDate", "LiverExcepDisease")]
        public virtual DateTime SccApprovalDate
        {
            get { return _sccApprovalDate; }
            set { _sccApprovalDate = value; }
        }
    }

    public class SccApprovalDateValidateAttribute : ValidationAttribute
    {
        public string m_SccApprovalDate { get; private set; }
        public string m_LiverExcepDisease { get; private set; }

        public SccApprovalDateValidateAttribute(string SccApprovalDate_PropertyName, string LiverExcepDisease_PropertyName)
        {
            this.m_SccApprovalDate = SccApprovalDate_PropertyName;
            this.m_LiverExcepDisease = LiverExcepDisease_PropertyName;
        }

        protected override ValidationResult IsValid(object value, ValidationContext context)
        {
            var SccApprovalDate_Property = context.ObjectType.GetProperty(m_SccApprovalDate);
            DateTime SccApprovalDate_Value = (DateTime)SccApprovalDate_Property.GetValue(context.ObjectInstance, null);

            var LiverExcepDisease_Property = context.ObjectType.GetProperty(m_LiverExcepDisease);
            LiverExcepDisease LiverExcepDisease_Value = (LiverExcepDisease)LiverExcepDisease_Property.GetValue(context.ObjectInstance, null);

            if (SccApprovalDate_Value != null && SccApprovalDate_Value != DateTime.MinValue && SccApprovalDate_Value != DateTime.MaxValue)
            {
                return LiverExcepDisease_Value.Id == 10 ? ValidationResult.Success : new ValidationResult("When other, SccApprovalDate can not be null.");
            }
            else
            {
                return ValidationResult.Success;
            }
        }
    }
}

如果要在類上使用驗證屬性,則需要:

[AttributeUsage(AttributeTargets.Class)]
public class Sccxxxxxxxxx : ValidationAttribute

https://msdn.microsoft.com/zh-cn/library/tw5zxet9.aspx?f=255&MSPPError=-2147217396

看一下這篇文章: ASP.NET MVC:通過DataAnnotation進行自定義驗證

另外,如果在SccApprovalDateValidateAttribute.ValidationResult()內放置一個斷點,是否會命中?

您的代碼看起來還不錯,但我看不到您在哪里調用或使用屬性SccApprovalDate,因為只有在運行時調用或使用該屬性時,才會調用在該屬性上聲明的驗證屬性。 您可以發布如何使用SccApprovalDate屬性嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM