سؤال

لدي نموذج يقوم بتنفيذ IValidatlableObject، وبالتالي التحقق من الأخطاء المخصصة من خلال طريقة التحقق من الصحة.

عندما أقوم بإنشاء كائن، يكون كل شيء على ما يرام، ولكن عندما أحاول تحرير هذا الكائن، لا أريد إجراء هذا التحقق المخصص.

كيف يمكنني معرفة الإجراء الذي أقوم باستدعاء طريقة التحقق من الصحة حتى لا أقوم بالتحقق؟

محدث:هذا هو نموذج مي:

public class Ingredient : IValidatableObject
{
    public int Id { get; set; }

    [Required(ErrorMessage = "Required!!")]
    public string Name { get; set; }

    public virtual List<Product> Products { get; set; }

    public Ingredient()
    {
        Products = new List<Product>();
    }

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        using (var uow = new UnitOfWork())
        {
            var ingredient = uow.IngredientRepository.Get(i => i.Name ==Name).FirstOrDefault();

            if (ingredient != null)
                yield return new ValidationResult("Duplicate!!!.", new[] { "Name" });
        }


    }
}

}

لذلك عندما أقوم بإنشاء مكون ، أريد التحقق من صحة كل شيء (السمات + aliviDatable) ولكن عندما أقوم بتحرير ingrendient ، أود فقط التحقق من صحة السمات (لذلك أعني تخطي alsivatable) أي طريقة لمعرفة ، داخل طريقة alividatable ، من أين أنا الاتصال بالتحقق؟

شكرًا!!!

هل كانت مفيدة؟

المحلول

تحقق من المفتاح الأساسي للنموذج - سواء كان غير فارغ :)

نصائح أخرى

أكثر الطريقة الصحيحة "mvcish" هنا هو في الواقع لديك فئتين، واحد لطريقة إنشاء واحد للتحرير.يمكنك الاتصال على فئة أساسية لأي التحقق من صحة مشتركة، فلن يتم التحقق من أي شيء غير مشترك هنا.

إذا كنت لا تريد التحقق من صحة كائن، فلا تتصل به Model.IsValid (أو Validate(), ، إذا كنت تفعل ذلك بشكل صريح.ولا يمكن الإجابة على أكثر من ذلك دون معرفة تفاصيل أكثر عن مشكلتك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top