SORU
11 ŞUBAT 2010, PERŞEMBE


Nasıl başa Booleans eğlence devri açmıştır ASP.NET MVC/Kutularını 2?

Bu görünüm bir model var:

public class SignUpViewModel
{
    [Required(ErrorMessage = "Bitte lesen und akzeptieren Sie die AGB.")]
    [DisplayName("Ich habe die AGB gelesen und akzeptiere diese.")]
    public bool AgreesWithTerms { get; set; }
}

Görünüm biçimlendirme kodu:

<%= Html.CheckBoxFor(m => m.AgreesWithTerms) %>
<%= Html.LabelFor(m => m.AgreesWithTerms)%>

Sonuç:

Hiçbir doğrulama gerçekleştirilir. Bool bir değer türü ve asla boş çünkü şu ana kadar. Ama eğer işe yaramaz null AgreesWithTerms yaparsam bile derleyici bağırıyor çünkü

"Alan şablonları erişim, mülkiyet erişim, tek boyutlu dizi dizin veya tek parametre özel oluşturucu ifadeler kullanılabilir."

Bu işlemek için doğru yolu nedir?

CEVAP
27 Ocak 2012, Cuma


Sunucu VE İstemci tarafı için bir doğrulayıcı oluşturmak istiyorum. MVC ve mütevazi form doğrulama kullanarak, bu sadece aşağıdaki şekilde elde edilebilir:

Öncelikle, şu şekilde: sunucu tarafı doğrulama gerçekleştirmek için projenizde bir sınıf oluşturun

public class EnforceTrueAttribute : ValidationAttribute, IClientValidatable
{
    public override bool IsValid(object value)
    {
        if (value == null) return false;
        if (value.GetType() != typeof(bool)) throw new InvalidOperationException("can only be used on boolean properties.");
        return (bool)value == true;
    }

    public override string FormatErrorMessage(string name)
    {
        return "The "   name   " field must be checked in order to continue.";
    }

    public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
    {
        yield return new ModelClientValidationRule
        {
            ErrorMessage = String.IsNullOrEmpty(ErrorMessage) ? FormatErrorMessage(metadata.DisplayName) : ErrorMessage,
            ValidationType = "enforcetrue"
        };
    }
}

Bu aşağıdaki, model içinde uygun özelliği açıklama:

[EnforceTrue(ErrorMessage=@"Error Message")]
public bool ThisMustBeTrue{ get; set; }

Ve son olarak, Görüntülemek için aşağıdaki komut ekleyerek istemci tarafında doğrulama etkinleştirin:

<script type="text/javascript">
    jQuery.validator.addMethod("enforcetrue", function (value, element, param) {
        return element.checked;
    });
    jQuery.validator.unobtrusive.adapters.addBool("enforcetrue");
</script>

Not: Biz zaten bizim modelden görüntülemek için elimizden açıklama iter. GetClientValidationRules bir yöntem yarattı

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • captainpuppys2000

    captainpuppy

    20 HAZİRAN 2013
  • FASHTAG

    FASHTAG

    5 EYLÜL 2012
  • Kontor.TV

    Kontor.TV

    14 Mart 2006