System.Webの中で結合モデルを使用して

    これは、結合良いモデルのasp.net Webフォームの不在下での使用ASHXする必要があるためです。だから私が来るのdllを見つけました。そして、彼はそれをラップします

        コードは以下の通りであります:

    パブリック クラスModelBinder 
    { 
        パブリック 静的 BinderResultModel <T> BindModel <T>()ここで、 T:新しい()
        { 
            VAR dicState = 新しいModelStateDictionary()。
            ModelBindingExecutionContextコンテキスト = 新しい ModelBindingExecutionContext(新しいHttpContextWrapper(HttpContext.Current)、dicState)。
            ModelBindingContext BindingContextを = 新しいModelBindingContext()
            { 
                ModelBinderProviders = ModelBinderProviders.Providers、 
                ModelMetadata= ModelMetadataProviders.Current.GetMetadataForType(()=> Activator.CreateInstance <T>()、typeof演算(T))
                にModelState = dicState、
                ValueProvider = 新しいNameValueCollectionValueProvider(context.HttpContext.Request.Params、CultureInfo.CurrentCulture)、
                のvalidateRequest = 
            }; 
            bindingContext.ValidationNode.ValidateAllProperties = ;
            もし(ModelBinders.Binders.DefaultBinder.BindModel(文脈、BindingContextを))
            { 
                戻り 新しい BinderResultModel <T>((T)bindingContext.Model、dicState)。
            } 
            戻り BinderResultModel <T> 。NULL。
        } 
        パブリック クラス BinderResultModel <T> T:新しい()
        { 公共静的 BinderResultModel <T> NULL 
            { 取得
                { 戻り新しい BinderResultModel <T>(デフォルト(T)、NULL" 返回空对象" )。
                } 
            } パブリックブールのIsValid { GET
             
                
                     
             ; }
             パブリック Tデータ{ 得ます}
             パブリック 文字列にErrorMessage { 取得 { 戻り _errorMsgと、} プライベート 集合 {_errorMsg = 値。}}
             プライベートModelStateDictionary _modelStateDic。
            プライベート 文字列 _errorMsg = 文字列.Empty。
            #region构造函数
             公共BinderResultModel(T T、ModelStateDictionary modelStateDic)
            { 
                IsValidの = 
                データ= T。
                _modelStateDic = modelStateDic。
                もし(!_modelStateDic = ヌル
                { 
                    のIsValid = _modelStateDic.IsValid。
                } 
                _errorMsg = GetErrorMessage()。
            } 
            公共 BinderResultModel(T tの、ModelStateDictionary modelStateDic、ストリング errorMsg内容):この(T、modelStateDic)
            { 
                _errorMsg = errorMsg内容。
            } 
            #endregion 
            #region私有函数

            プライベート ストリングGetErrorMessage()
            { 
                場合(_modelStateDicがある NULL 
                { 
                    戻り .Empty。
                } 
                のStringBuilderビルダー = 新規のStringBuilder();
                foreachのVARの状態_modelStateDic)
                { 
                    foreachのVARのエラーstate.Value.Errors)
                    { 
                        builder.Append(error.ErrorMessage)。
                    }
                    builder.AppendLine(); 
                } 
                を返す)(builder.ToStringします。
            } 
            #endregion 
        } 
    }

 

  Testクラスは、ときに使用します:

  

    クラス
    { 
        // [BindingBehavior(BindingBehavior.Never)]
         // [必須(にErrorMessage = "名前が必要とされる")] 
        [表示(NAME = " 名前" )] 
        [MINLENGTH(20、にErrorMessage = " 20の最小長さ" )] 
        [正規表現(" / ^ / D $ / "にErrorMessageは= " 正規表現を満足しない" )]
         パブリック 文字列名前{ GETSET ;}
         公共 のint年齢{ GETSET;} 
        [BindingBehavior(BindingBehavior.Never)] //決してバインドこの属性が示す
        公共リストを< 整数 >リスト{ GETSET ;}
         公共辞書< 文字列文字列 > DICS { GETSET ;} 
        [必須(にErrorMessage = " 必須としてミリアンペア" )]
         パブリックマンミリアンペア{ GETSET ;} 
    } 
    クラスマン
    { 
        [必須(にErrorMessage = " 666 666 666 666 ")]
         パブリック 文字列 MMM { 得ますセット; } 
    }

 使用します。

            VaRの結果= ModelBinder.BindModel <人> ();
             IF (result.IsValid)
            { 
                // バインドに成功し、検証がdoSomethingのを渡す
            }
             
            { 
                // 何かをします 
            }

 

おすすめ

転載: www.cnblogs.com/student-note/p/12466651.html