我现在有很多页面每个页面都有命名为:txtTitle,txtContent,txtKey等等文本框,这些文本框都是统一的名字那现在我在往数据库插入数据的时候,每个页面都要写很多this.txtTitle.Text,this.txtContent.Text很麻烦的我想可以可以单独在Appcode里的一个类写一个方法,这个方法就是用来获取每个页面的文本框的值的比如我在Appcode文件夹下的DataBase类里写个方法public void AddValue()
{
string Title = this.txtTitle.Text;
string Content = this.txtContent.Text;
......
然后再插入数据库操作....
}
然后在整个项目的每个页面都只要调用DataBase的AddValue()方法就可以从不同的页面获得这些值了我这个想法是不是很天真奥?因为首页在DataBase写那个AddValue()就是错的,因为DataBase根本没有txtTitle什么之类的那有米高手能告诉偶一个很好滴办法捏?

解决方案 »

  1.   

    你可以在DataBase类里写一个方法,设好相应的参数,在不同的页面中调用时,传入相关的text值就可以了
      

  2.   

    /// <summary>
    ///把表单中的数据绑定到业务对象的非静态公共属性上
    /// 要求表单名和对应的业务对象的属性名一致。
    /// </summary>
    /// <param name="container">控件容器,一般是Page对象或Panel对象</param>
    /// <param name="model">业务对象</param>
    public static void BindModelByControls(Control container ,object model)
    {
    if (model == null) return; PropertyInfo[] Properties=model.GetType().GetProperties(BindingFlags.Instance|
    BindingFlags.Public );

    object Value=null;
    foreach (PropertyInfo Property in Properties) 

    Control Ctrl = container.FindControl(Property.Name); 
    if (Ctrl != null) 

    if (Ctrl is TextBox) 
    Value=(Ctrl as TextBox).Text;
    else if (Ctrl is ListControl)   //DropDownList、RadioButtonList、CheckBoxList 和 ListBox  
    Value=(Ctrl as ListControl).SelectedValue; 
    else if (Ctrl is CheckBox) 
    Value=(Ctrl as CheckBox).Checked;
    else if (Ctrl is Calendar) 
    Value= (Ctrl as Calendar).SelectedDate ;
    else if (Ctrl is Literal)
    Value=(Ctrl as Literal).Text;
    else if (Ctrl is Label )
    Value=(Ctrl as Label).Text;
    else if (Ctrl is HtmlInputHidden )//隐藏域需设为“做为服务器控件运行"
    Value=(Ctrl as HtmlInputHidden).Value;
    else
    continue;
    if(Value!=null)
    {
    if (Value.ToString()==""&&Property.PropertyType!=typeof(string)) continue;
    }
    Property.SetValue(model,Convert.ChangeType(Value,Property.PropertyType),null);
    }  } }
      

  3.   


     还是一个一个页面的写。 你最好先看看 PetShop 里是怎么处理的。或者说看看三层结构方面的东西。
      

  4.   

    public void AddValue(Article a) 

    string Title = a.Title; 
    string Content = a.Content; 
    ...... 
    然后再插入数据库操作....
    }
    外边定义一个Article 类
      

  5.   

    很简单的OO问题,你需要建立一个PageBase类,继承自系统的Page类,然后在这个PageBase里放上你的控件txtTitle什么的,然后根据需要写property,例如
    public string Title {
       get {return txtTitle.Text;}
    }然后所有的ASPX页面都继承自PageBase,所有的页面都可以访问到“公用”(实际上是继承下来)的控件(或者将控件改为private,只通过属性property进行访问)
      

  6.   

    可以实现.
    为当前页面增加一个父类PageBase,在PageBase中遍历传递过来的这个页面,找到对应的textbox并处理之.
    例子:
    public class PageBase : System.Web.UI.Page
    { protected void SetVal()
    {
    if(!IsPostBack)
    {

    foreach (System.Web.UI.Control control in this.Controls[i].Controls)
    {
    if (control is TextBox)
    {
    swtich((control is TextBox).ClientID)
    {
    case "txtTitle":
    string Title=(control is TextBox).Text;
    break;
    //其它操作依次类推
    }
    }
    }
    }
    }
    }
    在要使用这个功能的页面的init中直接调用SetVal()。注意使用该功能的页面要继承这个父类。
      

  7.   

    这很麻烦吗?如果完全一样,写一遍,其余CTRL+V就可以了
      

  8.   

    如果你的页面大部分是更新数据库而且对应数据库字段的话,建议使用NHibernate。
      

  9.   

    public class PageBase : System.Web.UI.Page
    {    protected void SetVal()
        {
            if(!IsPostBack)
            {
                for (int i = 0; i < this.Controls.Count;i++)
        {
                  foreach (System.Web.UI.Control control in this.Controls[i].Controls)
                  {
                    if (control is TextBox)
                    {
                        switch((control is TextBox).Text)
                        {
                            case "txtTitle":
                                string Title=(control is TextBox).Text;
                            break;
                            //其它操作依次类推
                           }
                    }
                  }
                }
            }
        }
    }
      

  10.   

    protected void SetVal() 
    {  
    for (int i = 0; i < this.Controls.Count; i++) 

    foreach (System.Web.UI.Control control in this.Controls[i].Controls) 

    if (control is TextBox) 

    switch ((control as TextBox).ClientID) 

    case "txtTitle": 
    Titile1 = (control as TextBox).Text; 
    break; 
    default : 
    Titile1 = "aaaaa"; 
    break; 
    //其它操作依次类推 


    }
    }
    }测试通过
      

  11.   

    这个方法是相对不错的。在不考虑多态的情况下我认为下面的方法最适:我个人推荐 Database类不要拿着别人的信息,修改建议如下
    public void AddValue()
    {
    string Title = this.txtTitle.Text;
    string Content = this.txtContent.Text;
    ......
    然后再插入数据库操作....
    } 改为
    public void AddValue(string Title ,string Content)
    {
    然后再插入数据库操作....
    } 使用方法:
    XXX_aspx.csDatabase db= new Database();
    db.AddValue(this.txtTitle.Text,this.txtContent.Text);
      

  12.   

    你可以在DataBase类里写一个方法,设好相应的参数,在不同的页面中调用时,传入相关的text值就可以了
      

  13.   

    新建个类就写你刚才的哪个方法,不过加个参数
    public void AddValue(Page pg) 

    string Title = ((textBox)pg.FindControl("txtTitle")).Text; 
    string Content = ((textBox)pg.FindControl("txtContent")).Text;
    ...... 
    然后再插入数据库操作.... 
      

  14.   

    public void AddValue(string Title,string Content) 

    然后再插入数据库操作.... 

    再调这个方法,用this.txtTitle.Text和this.txtContent.Text做参数