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>

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

                  /// </summary>

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

                  /// <param name="parentControl">控件的容器(比如Page或者M(jìn)aster的站位控件)</param>

                  /// <returns>返回參數(shù)里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">某個(gè)屬性</param>

                  /// <param name="parentControl">控件的容器(比如Page或者M(jìn)aster的站位控件)</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">某個(gè)屬性</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的值到頁面上對應(yīng)控件(要求控件必須以“_Model的屬性名”來命名(如:_Name),并大小寫一致)

                  /// </summary>

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

                  /// <param name="parentControl">控件的容器(比如Page或者M(jìn)aster的站位控件)</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的某個(gè)屬性</param>

                  /// <param name="parentControl">控件的容器(比如Page或者M(jìn)aster的站位控件)</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) 評(píng)論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          常用鏈接

          留言簿(5)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 临沭县| 沾化县| 齐河县| 澄迈县| 特克斯县| 达尔| 德安县| 西乌| 佛山市| 丹巴县| 崇明县| 湟中县| 韩城市| 凉山| 兖州市| 湘阴县| 开阳县| 甘谷县| 九台市| 东海县| 磐石市| 博野县| 紫金县| 金溪县| 上饶县| 镇赉县| 德令哈市| 永仁县| 乾安县| 且末县| 邵武市| 东乌| 修武县| 中西区| 贵溪市| 博湖县| 灵寿县| 庆元县| 青州市| 沅江市| 广安市|