C# Model 클래스를 반사로 동적으로 폼에 불러오기

7169 단어 velocity
일반적으로 우리는 내용을 편집할 때 사용자가 직접 변경할 수 있도록 원래의 데이터를 이 표에 불러옵니다.
코드는 다음과 같습니다.
            if (Labs.Utils.ValidateUtil.IsNumber(ActionId))

            {

                int ActionIdForInt = Convert.ToInt32(ActionId);

                model = bll.GetModel(ActionIdForInt);

                if (model != null)

                {                    //      VTL    

                    VelocityContext.Put("CmsType", model.CmsType);

                    VelocityContext.Put("ConnectionString", model.ConnectionString);

                    VelocityContext.Put("DataBaseType", model.DataBaseType);

                    VelocityContext.Put("DevLang", model.DevLang);

                    VelocityContext.Put("Id", model.Id);

                    VelocityContext.Put("SiteDomain", model.SiteDomain);

                    VelocityContext.Put("Title", model.Title);

                    //    this.TextBox.Text=model.CmsType;

                    …

                }

                else

                    Page.ErrMsg = validate.nodata_err;

            }

            else

                Page.ErrMsg = validate.id_format_err;


위의 코드는 매우 번거롭고 무미건조하며 가장 화가 나는 것은 오류가 발생하기 쉽다는 것이다. 마치 ASp 코드를 쓰는 것 같다. 다음과 같은 방법으로 위의 문제를 해결할 수 있다.
        /// <summary>

        ///           Velocity        

        /// </summary>

        /// <param name="obj">   </param>

        public static void ModelToVTL(object obj)

        {

            Type t = obj.GetType();

            System.Reflection.PropertyInfo[] Property = t.GetProperties();

            foreach (System.Reflection.PropertyInfo pi in Property)

            {

                VelocityContext.Put(pi.Name, new Labs.Web.UserDataReflection.BLL().GetModelValue(pi.Name, obj));

            }

        }


반사를 이용하여 실체 클래스 안의 공유 속성을 얻고 옮겨다니며 VTL 값을 설정합니다.
GetModelValue라는 방법도 사용되었는데, 사실 지난 로그에서 나는 이미 코드를 써서, 클래스의 어떤 구성원의 속성을 얻었다. 여기에 다시 붙여 놓았는데, 코드는 다음과 같다.
        /// <summary>

        ///         

        /// </summary>

        /// <param name="FieldName"></param>

        /// <param name="obj"></param>

        /// <returns></returns>

        public string GetModelValue(string FieldName, object obj)

        {

            try

            {

                Type Ts = obj.GetType();

                object o = Ts.GetProperty(FieldName).GetValue(obj, null);

                string Value = Convert.ToString(o);

                if (string.IsNullOrEmpty(Value)) return null;

                return Value;

            }

            catch

            {

                return null;

            }

        }


호출 방법:
            if (Labs.Utils.ValidateUtil.IsNumber(ActionId))

            {

                int ActionIdForInt = Convert.ToInt32(ActionId);

                model = bll.GetModel(ActionIdForInt);

                if (model != null)

                {

                    Labs.Web.WebPublic.ModelToVTL(model);//    ,      .
       

           }

                else

                    Page.ErrMsg = validate.nodata_err;

            }

            else

                Page.ErrMsg = validate.id_format_err;


이런 방법은 호출이 간단하고 오류가 발생하기 쉬우나, 프론트 데스크톱의 설정을 할 때, Name 값은 속성 값과 같아야 한다. 그렇지 않으면 조절할 수 없다.
프론트 데스크톱에 설정된 코드를 다시 붙여 주세요. 여기는 VTL을 사용했습니다. 서로 다른 페이지 구조는 다른 방법을 사용해야 합니다.
         <form action="${Url}" method="post" name="addForm">

        	<li>

            <span class="color_f00">*</span>    :<br>

            <input type="text" name="SiteDomain" value="$!{SiteDomain}" class="input1" onblur="LoadSite(this.value)" />

            <span class="color_999"> "www.xinlg.com",   "http://"</span>

            </li>

            <li class="DataBaseType">

            <span class="color_f00">*</span>      :<br>

            <select name="DataBaseType" id="DataBaseType">

            <option value="">--       --</option>

            #foreach($db in ${DataBaseType_D})

            <option value="$db">$db</option>

            #end

            </select>

            </li>

            <li class="ConnectionString">

            <span class="color_f00">*</span>        :<br>

            <input type="text" name="ConnectionString" style="width:50%" value="$!{ConnectionString}" class="input1" />

            </li>

            #if(${display})

            <div class="box">

            <li>

                 <span class="color_999">(             )</span>:<br>

            <input type="text" id="sql_Server" />

            </li>

            <li>

               :<br>

            <input type="text" id="sql_User" />

            </li>

            <li>

              :<br>

            <input type="text" id="sql_Password" />

            </li>

            </div>

            #end

            

            <li>

            <span class="color_f00">*</span>    :<br>

            <input type="text" name="Title" class="input1" value="$!{Title}" />

            </li>

            <li class="line">

                :<br>

            <select name="DevLang" id="DevLang">

            <option value="">--      --</option>

            #foreach($lang in ${DevLang_D})

            <option value="$lang">$lang</option>

            #end

            </select>

            </li>

            <li>

                :<br>

            <input type="text" name="CmsType" id="CmsType" class="input1" value="$!{CmsType}" /> <<

            <select onchange="$('#CmsType').val(this.value);">

            <option value="">--   --</option>

            #foreach($Cms in ${CmsType_D})

            <option value="$Cms">$Cms</option>

            #end

            </select>

            </li>

            #if(${Action}=="edit")

            <li><input type="submit" value="   " name="editBtn" class="btn1" /></li>

            #else

            <li><input type="submit" value="   " name="addBtn" class="btn1" /></li>

            #end

        </form>


모두들 벽돌을 던지지 마세요, 허허.
역장님들 아래를 보세요>>>

좋은 웹페이지 즐겨찾기