新建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傳進去應該是沒有問題的