using System;
          using System.Collections.Generic;
          using System.Linq;
          using System.Web;
          using System.Web.UI;
          using System.Web.UI.WebControls;
          using System.Reflection;
          using System.IO;
          using System.Text;

          namespace ProjectDemo.Common
          {
              public static class EntityCopy
              {
                  
                   #region
                   /// <summary>

                  /// 通過搜索頁面對應控件來構造Model對象(要求控件必須以“_Model的屬性名”來命名(如:_Name),并大小寫一致)

                  /// </summary>

                  /// <param name="model">要構造的Model對象()</param>

                  /// <param name="parentControl">控件的容器(比如Page或者Master的站位控件)</param>

                  /// <returns>返回參數里model</returns>

                  public static T GetModel<T>(T model, Control parentControl)

                  {

                      Type t = model.GetType();

                      PropertyInfo[] pi = t.GetProperties();

                      foreach (PropertyInfo p in pi)

                      {

                          SetControlValueToModel(model, p, parentControl);

                      }

                      return model;

                  }

           

                  /// <summary>

                  /// 把頁面控件上的值賦值給Model對象(要求控件必須以“_Model的屬性名”來命名(如:_Name),并大小寫一致)

                  /// </summary>

                  /// <param name="model">要賦值的Model對象</param>

                  /// <param name="p">某個屬性</param>

                  /// <param name="parentControl">控件的容器(比如Page或者Master的站位控件)</param>

                  private static void SetControlValueToModel(object model, PropertyInfo p, Control parentControl)

                  {

                      Control control = parentControl.FindControl("_" + p.Name);

                      if (control != null)

                      {

                          Type t_c = control.GetType();

                          switch (t_c.FullName)

                          {

                              case "System.Web.UI.WebControls.TextBox": SetValue(model, p, ((TextBox)control).Text); break;

                              case "System.Web.UI.WebControls.CheckBox": SetValue(model, p, ((CheckBox)control).Checked); break;

                              case "System.Web.UI.WebControls.CheckBoxList":

                                  CheckBoxList cbl = ((CheckBoxList)control);

                                  StringBuilder sb = new StringBuilder();

                                  for (int i = 0; i < cbl.Items.Count; i++)

                                  {

                                      if (cbl.Items[i].Selected)

                                      {

                                          sb.Append(i);

                                          sb.Append(",");

                                      }

                                  }

                                  SetValue(model, p, sb.ToString().TrimEnd(',')); break;

                              case "System.Web.UI.WebControls.Image": SetValue(model, p, ((Image)control).ImageUrl); break;

                              case "System.Web.UI.WebControls.DropDownList": SetValue(model, p, ((DropDownList)control).SelectedValue); break;

                              case "System.Web.UI.WebControls.RadioButtonList": SetValue(model, p, ((RadioButtonList)control).SelectedValue); break;

                              case "System.Web.UI.WebControls.HiddenField": SetValue(model, p, ((HiddenField)control).Value); break;

                              default: break;

                          }

                      }

                  }

           

                  /// <summary>

                  /// 把值賦給指定Model對象指定屬性上

                  /// </summary>

                  /// <param name="model">需要賦值的Model對象</param>

                  /// <param name="p">某個屬性</param>

                  /// <param name="value">要賦給Model的屬性的值</param>

                  private static void SetValue(object model, PropertyInfo p, object value)

                  {

                      if (p.PropertyType.FullName == "System.Guid")

                      {

                          p.SetValue(model, new Guid(value.ToString()), null);

                      }

                      else

                      {

                          p.SetValue(model, Convert.ChangeType(value, p.PropertyType), null);

                      }

                  }

           

                  #endregion

           

                  #region 反射Model綁定頁面控件

           

                  /// <summary>

                  /// 綁定Model的值到頁面上對應控件(要求控件必須以“_Model的屬性名”來命名(如:_Name),并大小寫一致)

                  /// </summary>

                  /// <param name="model">賦好值的Model</param>

                  /// <param name="parentControl">控件的容器(比如Page或者Master的站位控件)</param>

                  public static void BindControls(object model, Control parentControl)

                  {

                      Type t = model.GetType();

                      PropertyInfo[] pi = t.GetProperties();

                      foreach (PropertyInfo p in pi)

                      {

                          SetModelValueToControl(model, p, parentControl);

                      }

                  }

           

                  /// <summary>

                  /// 把Model的值賦給頁面上的控件(目前只針對Web)

                  /// </summary>

                  /// <param name="model">賦好值的Model</param>

                  /// <param name="p">Model的某個屬性</param>

                  /// <param name="parentControl">控件的容器(比如Page或者Master的站位控件)</param>

                  private static void SetModelValueToControl(object model, PropertyInfo p, Control parentControl)

                  {

                      Control control = parentControl.FindControl("_" + p.Name);

                      if (control != null)

                      {

                          Type t_c = control.GetType();

                          switch (t_c.FullName)

                          {
                              case "System.Web.UI.WebControls.TextBox": ((TextBox)control).Text = p.GetValue(model, null).ToString(); break;
                              case "System.Web.UI.WebControls.Label": ((Label)control).Text = p.GetValue(model, null).ToString(); break;

                              case "System.Web.UI.WebControls.Literal": ((Literal)control).Text = p.GetValue(model, null).ToString(); break;

                            

                              case "System.Web.UI.WebControls.Image": ((Image)control).ImageUrl = p.GetValue(model, null).ToString(); break;

                              case "System.Web.UI.WebControls.DropDownList": ((DropDownList)control).SelectedValue = p.GetValue(model, null).ToString(); break;

                              case "System.Web.UI.WebControls.RadioButtonList": ((RadioButtonList)control).SelectedValue = p.GetValue(model, null).ToString(); break;

                              case "System.Web.UI.WebControls.CheckBox": ((CheckBox)control).Checked = (bool)p.GetValue(model, null); break;

                              case "System.Web.UI.WebControls.CheckBoxList":

                                  string[] arr = ((string)p.GetValue(model, null)).Split(',');

                                  CheckBoxList cbl = ((CheckBoxList)control);

                                  for (int i = 0; i < arr.Length; i++)

                                  {

                                      cbl.Items[int.Parse(arr[i])].Selected = true;

                                  }

                                  break;

                              case "System.Web.UI.WebControls.HiddenField": ((HiddenField)control).Value = p.GetValue(model, null).ToString(); break;

                              default: break;

                          }

                      }

                  }

                     #endregion

           


              }
              public class Person
              {
                  public string Name { set; get; }
                  public string Sex { set; get; }
              }
          }

          posted on 2013-06-09 17:13 sanmao 閱讀(682) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 绥化市| 金沙县| 淮安市| 乌拉特前旗| 襄樊市| 肥城市| 古丈县| 鸡西市| 建昌县| 普安县| 霍林郭勒市| 德令哈市| 六安市| 和林格尔县| 山西省| 兴文县| 苍南县| 东光县| 郧西县| 延长县| 拜泉县| 平原县| 东港市| 罗山县| 栖霞市| 德格县| 涿州市| 双鸭山市| 安吉县| 刚察县| 墨脱县| 外汇| 灵台县| 额敏县| 塔城市| 荆州市| 肥乡县| 改则县| 鞍山市| 子长县| 舞钢市|