日期:2014-05-20  浏览次数:21179 次

新建BasePage类,aspx继承它。获取TextBox控件的值的问题?

建立一个BasePage.cs的类,类有一个方法
public class BasePage : System.Web.UI.Page
{
 public T CopyValueToModel<T>(T entity,Page page)
 {
  T obj = (T)System.Reflection.Assembly.GetAssembly(typeof(T)).CreateInstance(typeof(T).ToString());
  System.Reflection.PropertyInfo[] pps = obj.GetType().GetProperties();
  string objName = obj.GetType().Name;
  foreach (System.Reflection.PropertyInfo pi in pps)
  {
  TextBox txtBox = (TextBox)FindControl(objName + "_" + pi.Name);
  }
  }
}

新建aspx页面,page继承BasePage,使用BasePage类的CopyValueToMode方法,
public partial class Demo_Demo : BasePage
{
  protected void Page_Load(object sender, EventArgs e)
  {
Demo demo = new Demo();
CopyValueToModel<Demo>(demo);
  }
}

结果,BasePage类中:
 TextBox txtBox = (TextBox)FindControl(objName + "_" + pi.Name);
 txtBox = null ,也就是找不到页面中定义的textBox的值

问:应该怎么写才能获取aspx页面中定义的TextBox控件的值。

------解决方案--------------------

C# code
public class BasePage:System.Web.UI.Page
{
    public BasePage()
    {
        this.Load += new EventHandler(BasePage_Load);
    }
    void BasePage_Load(object sender, EventArgs e)
    {
 //如果用户没有登录就跳转到登录页
        if (Session["UserName"] == null)
        {
            Response.Redirect("~/Login.aspx");
        }
    }
}

------解决方案--------------------
FindControl是查找页面中存在的控件,其中的参数应该是对应的控件的ID,而不是LZ那样的写法

比如有个TextBox的ID为:UserName,那么应该这样查找:

FindControl("UserName")

另外,LZ的这个用法不明白:
CopyValueToModel <Demo>(demo);

CopyValueToModel函数明明有两个参数呀,为什么你只传了一个进来呢?
------解决方案--------------------
不要从控件里面取,从request里面取保证好。

MVC框架都是这么做的
------解决方案--------------------
1.另外最好把容器傳進去取值,這樣在小范圍查找
2.findcontrol莫非只是在basepage范圍找的?調試看看,實在不行將page傳進去應該是沒有問題的