我现在有很多页面每个页面都有命名为: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什么之类的那有米高手能告诉偶一个很好滴办法捏?
{
string Title = this.txtTitle.Text;
string Content = this.txtContent.Text;
......
然后再插入数据库操作....
}
然后在整个项目的每个页面都只要调用DataBase的AddValue()方法就可以从不同的页面获得这些值了我这个想法是不是很天真奥?因为首页在DataBase写那个AddValue()就是错的,因为DataBase根本没有txtTitle什么之类的那有米高手能告诉偶一个很好滴办法捏?
///把表单中的数据绑定到业务对象的非静态公共属性上
/// 要求表单名和对应的业务对象的属性名一致。
/// </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);
} } }
还是一个一个页面的写。 你最好先看看 PetShop 里是怎么处理的。或者说看看三层结构方面的东西。
{
string Title = a.Title;
string Content = a.Content;
......
然后再插入数据库操作....
}
外边定义一个Article 类
public string Title {
get {return txtTitle.Text;}
}然后所有的ASPX页面都继承自PageBase,所有的页面都可以访问到“公用”(实际上是继承下来)的控件(或者将控件改为private,只通过属性property进行访问)
为当前页面增加一个父类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()。注意使用该功能的页面要继承这个父类。
{ 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;
//其它操作依次类推
}
}
}
}
}
}
}
{
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;
//其它操作依次类推
}
}
}
}
}测试通过
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);
public void AddValue(Page pg)
{
string Title = ((textBox)pg.FindControl("txtTitle")).Text;
string Content = ((textBox)pg.FindControl("txtContent")).Text;
......
然后再插入数据库操作....
}
{
然后再插入数据库操作....
}
再调这个方法,用this.txtTitle.Text和this.txtContent.Text做参数