ASP.NET MVC1.0の検証とxVal
-
21-09-2019 - |
質問
私は実際に細とその他の検証方法です。このような多くのオプションprebuiltいての検証とASP.NET MVC-1.0です。主なものっている人を見つはxVal.ただし、文字通りのない文書です。このブログの創業者はそういう二つの柱です。
とにかく、みん見られることも可能ですのでお客様バリデーションを実施します。私の問題として利用できなくなりました。属性に基づくもので、私は私の生成モデルを用いLLBLGenとにならないようにしたい具体的な方法を以下に示す.
お世話になりたいと思いまま約xVal話の可能性をIRulesProviderが実情報をどのように行い、使用しています。がその場で発音を確認することがあるコードを実装しているものの属性を使用できるように設計していかない。
ですので誰にでも提供方法についてのガイダンスを利用xValについて知っておきましょない手コマモデルクラスを使用DataAnnotationsうになるだけに開かの代替xValになるとなかなかないものといわASP.NET MVC1.0とが必要でクライアント側の検証。
編集: とは思わない部分クラスのアプローチ仕する所存でございますので今後発生するコードで多くれ異なる構成に基づいています。
解決
あなたは部分クラスでたmetadataType属性を使用してLLBLGenや他のORM生成されたクラスでXVALを使用することができます。あなたはUserEntity呼ばLLBL生成されたエンティティを持っている場合たとえば、あなたは部分クラスを作成します。このようなたmetadataType属性でそれをマークアップ:
[MetadataType(typeof(UserEntityMetaData))]
public partial class UserEntity
{
}
あなたがよりあなたがこのような適切な属性とプロパティをマークアップすることができますメタクラスを作成します。
public class UserEntityMetaData
{
[Required()]
[StringLength(50)]
[DataType(DataType.EmailAddress)]
public object EmailAddress { get; set; }
[Required()]
[StringLength(32)]
[DataType(DataType.Password)]
public object Password { get; set; }
[Required()]
[StringLength(25)]
public object FirstName { get; set; }
[Required()]
[StringLength(25)]
public object LastName { get; set; }
}
これは、ちょうどあなたのカスタム部分クラス、あなたがLLBL生成されたコードを変更する必要はありませできるようになります。唯一の難点は、あなたが生成されたエンティティクラスと同じ名前空間の部分クラスとメタクラスの両方をしたいということです。あなたはこれを行う必要はありませんが、あなたはXVAL検証を呼び出すとき、それは物事が容易になります。
他のヒント
のほかに何jcerheaはあなたもDataAnnotationsValidationRunnerクラスが例えばGetErrors方法、で「バディ」クラスを処理するように設定されている方法を変更する必要があると述べています。
namespace Entities
{
public static class DataAnnotationsValidationRunner
{
public static IEnumerable<ErrorInfo> GetErrors(object instance)
{
var metadataAttrib = instance.GetType().GetCustomAttributes(typeof(MetadataTypeAttribute), true).OfType<MetadataTypeAttribute>().FirstOrDefault();
var buddyClassOrModelClass = metadataAttrib != null ? metadataAttrib.MetadataClassType : instance.GetType();
var buddyClassProperties = TypeDescriptor.GetProperties(buddyClassOrModelClass).Cast<PropertyDescriptor>();
var modelClassProperties = TypeDescriptor.GetProperties(instance.GetType()).Cast<PropertyDescriptor>();
return from buddyProp in buddyClassProperties
join modelProp in modelClassProperties on buddyProp.Name equals modelProp.Name
from attribute in buddyProp.Attributes.OfType<ValidationAttribute>()
where !attribute.IsValid(modelProp.GetValue(instance))
select new ErrorInfo(buddyProp.Name, attribute.FormatErrorMessage(string.Empty), instance);
}
}
}