Tôi có một ValidationAttribute mà tôi đã tạo được chia sẻ giữa Server và Client. Để có được thuộc tính xác nhận hợp lệ để tạo ra cho máy khách khi được tham chiếu trong lớp trợ giúp dữ liệu, tôi phải rất cụ thể trong cách tôi đã xây dựng nó.ValidationErrors của ValidationAttribute tùy chỉnh không được hiển thị đúng cách
Sự cố tôi gặp phải là vì một lý do nào đó khi tôi trả về ValidationResult từ lớp thuộc tính xác thực tùy chỉnh, nó không được xử lý giống như các thuộc tính xác thực khác trên giao diện người dùng. Thay vì hiển thị lỗi, nó không làm gì cả. Nó sẽ xác nhận hợp lệ đối tượng mặc dù, nó chỉ không hiển thị kết quả xác nhận không thành công.
Dưới đây là mã cho một trong các lớp xác thực tùy chỉnh của tôi.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel.DataAnnotations;
namespace Project.Web.DataLayer.ValidationAttributes
{
[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field, AllowMultiple = false)]
public class DisallowedChars : ValidationAttribute
{
public string DisallowedCharacters
{
get
{
return new string(this.disallowedCharacters);
}
set
{
this.disallowedCharacters = (!this.CaseSensitive ? value.ToLower().ToCharArray() : value.ToCharArray());
}
}
private char[] disallowedCharacters = null;
private bool caseSensitive;
public bool CaseSensitive
{
get
{
return this.caseSensitive;
}
set
{
this.caseSensitive = value;
}
}
protected override ValidationResult IsValid(object value, ValidationContext validationContext)
{
if (value != null && this.disallowedCharacters.Count() > 0)
{
string Value = value.ToString();
foreach(char val in this.disallowedCharacters)
{
if ((!this.CaseSensitive && Value.ToLower().Contains(val)) || Value.Contains(val))
{
return new ValidationResult(string.Format(this.ErrorMessage != null ? this.ErrorMessage : "'{0}' is not allowed an allowed character.", val.ToString()));
}
}
}
return ValidationResult.Success;
}
}
}
Đây là cách tôi sử dụng nó trên Thuộc tính của tôi trên cả máy chủ và ứng dụng khách.
[DisallowedChars(DisallowedCharacters = "=")]
Và tôi đã thử một số cách khác nhau để thiết lập ràng buộc.
{Binding Value, NotifyOnValidationError=True}
Cũng như
{Binding Value, NotifyOnValidationError=True, ValidatesOnDataErrors=True, ValidatesOnExceptions=True, ValidatesOnNotifyDataErrors=True}
Không ai trong số những vẻ để làm cho hình thức mà họ đang bị ràng buộc quá xác nhận các mục. Tôi đã thử bằng cách sử dụng thuộc tính này trên các giá trị được ràng buộc với TextBoxes, XamGrids, và không phải của những người hợp lệ xác nhận như họ nên.
Vấn đề này chỉ có vẻ là khi tôi đang cố gắng sử dụng ValidationResult ở phía máy chủ. Nếu tôi sử dụng kết quả xác nhận trên một giá trị trong mô hình khung nhìn của tôi thì nó sẽ xác nhận hợp lệ. Tôi cần phải tìm một cách để làm cho xác nhận hợp lệ này từ mã được tạo ra mặc dù.
Bất kỳ suy nghĩ nào cũng sẽ được đánh giá rất nhiều.
Cảm ơn bạn rất nhiều. Điều đó đã khắc phục được vấn đề của tôi. –