JQuery ненавязчивая проверка - Сравнить Атрибут Equals всегда сравнивает значение с & ldquo; & rdquo; пустой [дубликат]

Строка ошибки «Ссылка на объект, не установленная на экземпляр объекта.» указывает, что вы не назначили экземпляр объекта объектной ссылке, и все же вы получаете доступ к свойствам / методам этого объекта.

например: скажем, у вас есть класс под названием myClass и он содержит одно свойство prop1.

public Class myClass
{
   public int prop1 {get;set;}
}

Теперь вы получаете доступ к этому prop1 в каком-то другом классе, как показано ниже:

public class Demo
{
     public void testMethod()
     {
        myClass ref = null;
        ref.prop1 = 1;  //This line throws error
     }
}

выше строки выдает ошибку, потому что ссылка класса myClass объявлена, но не создана, или экземпляр объекта не назначается referecne этого класса.

Чтобы исправить это, вам нужно создать экземпляр (присвоить объект ссылке на этот класс).

public class Demo
{
     public void testMethod()
     {
        myClass ref = null;
        ref = new myClass();
        ref.prop1 = 1;  
     }
}
33
задан Scott 9 February 2011 в 15:19
поделиться

6 ответов

В ASP.NET MVC 3 Framework есть атрибут CompareAttribute, который делает это. Если вы используете ASP.NET MVC 2 и таргетинг. Net 4.0, вы можете посмотреть на реализацию в исходном коде ASP.NET MVC 3.

26
ответ дан Joe Cartano 27 August 2018 в 14:25
поделиться

Это более длинная версия ответа Дарина:

public class CustomAttribute : ValidationAttribute
{    
    public override bool IsValid(object value)
    {
        if (value.GetType() == typeof(Foo))
        {
           Foo bar = (Foo)value;
           //compare the properties and return the result
        }

        throw new InvalidOperationException("This attribute is only valid for Foo objects");
    }
}

и использование:

[MetadataType(typeof(FooMD))]
public partial class Foo
{
     ... functions ...
}

[Custom]
public class FooMD
{
     ... other data annotations ...
}

Ошибка будет отображаться в @Html.ValidationSummary(false)

7
ответ дан AndyMcKenna 27 August 2018 в 14:25
поделиться

Для будущих людей, рассматривающих эту проблему, я пытался написать атрибут проверки, который бы оценивал регулярное выражение, если свойство объекта было определенным значением. В моем случае, если адрес был адресом доставки, я не хотел, чтобы PO Boxes был включен, так что это то, что я придумал:

Использование

[Required]
public EAddressType addressType { get; set; } //Evaluate Validation attribute against this

[EvaluateRegexIfPropEqualsValue(Constants.NOT_PO_BOX_REGEX, "addressType", EAddressType.Shipping, ErrorMessage = "Unable to ship to PO Boxes or APO addresses")]
public String addressLine1 { get; set; }

И вот код для атрибута проверки:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class EvaluateRegexIfPropEqualsValue : ValidationAttribute
{
    Regex _regex;
    string _prop;
    object _targetValue;

    public EvaluateRegexIfPropEqualsValue(string regex, string prop, object value)
    {
        this._regex = new Regex(regex);
        this._prop = prop;
        this._targetValue = value;
    }

    bool PropertyContainsValue(Object obj)
    {
        var propertyInfo = obj.GetType().GetProperty(this._prop);
        return (propertyInfo != null && this._targetValue.Equals(propertyInfo.GetValue(obj, null)));
    }

    protected override ValidationResult IsValid(object value, ValidationContext obj)
    {
        if (this.PropertyContainsValue(obj.ObjectInstance) && value != null && !this._regex.IsMatch(value.ToString()))
        {
            return new ValidationResult(this.ErrorMessage);
        }
        return ValidationResult.Success;
    }
}
0
ответ дан Daniel 27 August 2018 в 14:25
поделиться

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

3
ответ дан Darin Dimitrov 27 August 2018 в 14:25
поделиться

Убедитесь, что ваш проект ссылается на system.web.mvc v3.xxxxx.

Тогда ваш код должен выглядеть примерно так:

using System.Web.Mvc;

. , , .

[Required(ErrorMessage = "This field is required.")]    
public string NewPassword { get; set; }

[Required(ErrorMessage = "This field is required.")]
[Compare(nameof(NewPassword), ErrorMessage = "Passwords don't match.")]
public string RepeatPassword { get; set; }
47
ответ дан Marcos Dimitrio 27 August 2018 в 14:25
поделиться

, если вы, ребята, используете MVC 4, пожалуйста, попробуйте этот код .. он решит вашу ошибку.

сделайте один метадатчик, чем в свойствах comfirmemail класса imiment. проверьте приведенный ниже код для получения дополнительной информации.

using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;
    using StringlenghtMVC.Comman;
    using System.Web.Mvc;

using System.Collections;

    [MetadataType(typeof(EmployeeMetaData))] //here we call metadeta class
    public partial class Employee
    {
        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public Nullable<int> Age { get; set; }
        public string Gender { get; set; }
        public Nullable<System.DateTime> HireDate { get; set; }

       //[CompareAttribute("Email")]
        public string ConfirmEmail { get; set; }
    }

    public class EmployeeMetaData
    {
        [StringLength(10, MinimumLength = 5)]
        [Required]
        //[RegularExpression(@"(([A-za-Z]+[\s]{1}[A-za-z]+))$", ErrorMessage = "Please enter Valid Name")]
        public string Name { get; set; }

        [Range(1, 100)]
        public int Age { get; set; }
        [CurrentDate]
        [DisplayFormat(DataFormatString = "{0:d}", ApplyFormatInEditMode = true)]
        public DateTime HireDate { get; set; }

        //[RegularExpression(@"^[\w-\._\%]+@(?:[\w]{2,6}$")]
        public string Email { get; set; }

        [System.Web.Mvc.CompareAttribute("Email")]
        public string ConfirmEmail { get; set; }


    }
2
ответ дан Snehal Thakkar 27 August 2018 в 14:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: