我自定义了一个WEB用户空控件
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ContArea.ascx.cs" Inherits="HtmlKj_ContArea" %>
<asp:DropDownList ID="CityArea1" runat="server" AutoPostBack="True"
onselectedindexchanged="CityArea1_SelectedIndexChanged" >
<asp:ListItem Value="25">云南省</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="CityArea2" runat="server" AutoPostBack="True"
onselectedindexchanged="CityArea2_SelectedIndexChanged">
<asp:ListItem Value="0">请选择地区</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="CityArea3" runat="server">
<asp:ListItem Value="0">请选择县市</asp:ListItem>
</asp:DropDownList>
后台代码是这样的:using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
public partial class HtmlKj_ContArea : System.Web.UI.UserControl
{ public string _CityArea1
{
get { return CityArea1.SelectedValue; }
set { CityArea1.SelectedValue = value; }
}
public string _CityArea2
{
get { return CityArea2.SelectedValue; }
set { CityArea2.SelectedValue = value; }
}
public string _CityArea3
{
get { return CityArea3.SelectedValue; }
set { CityArea3.SelectedValue = value; }
}
DataBase dab = new DataBase();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SelectarArea(0, 0);
}
}
protected void SelectarArea(int parentID,int stype)
{
if (parentID == 0)
{
CityArea1.Items.Clear();
CityArea1.Items.Add(new ListItem("请选择", "0"));
string sql = "select * from [Base_Area] where AreaID=25";
SqlDataReader dr = dab.datareader(sql);
while (dr.Read())
{
CityArea1.Items.Add(new ListItem(dr["AreaName"].ToString(), dr["AreaID"].ToString()));
}
dr.Close();
dab.close();
}
else
{
if (stype == 1)
{
CityArea2.Items.Clear();
CityArea3.Items.Clear();
CityArea3.Items.Add(new ListItem("请选择县市", "0"));
}
else if (stype == 2)
{
CityArea3.Items.Clear();
CityArea3.Items.Add(new ListItem("请选择县市", "0"));
}
else
{
CityArea1.Items.Clear();
}
string sql = "select * from [Base_Area] where ParentID=" + parentID + " and State=0";
SqlDataReader dr = dab.datareader(sql);
while (dr.Read())
{
if (stype == 1)
{
CityArea2.Items.Add(new ListItem(dr["AreaName"].ToString(), dr["AreaID"].ToString()));
}
else if (stype == 2)
{
CityArea3.Items.Add(new ListItem(dr["AreaName"].ToString(), dr["AreaID"].ToString()));
}
else
{
CityArea1.Items.Add(new ListItem(dr["AreaName"].ToString(), dr["AreaID"].ToString()));
}
}
dr.Close();
dab.close();
}
}
protected void CityArea2_SelectedIndexChanged(object sender, EventArgs e)
{
int paid = Int32.Parse(CityArea2.SelectedValue);
SelectarArea(paid, 2);
}
protected void CityArea1_SelectedIndexChanged(object sender, EventArgs e)
{
int paid = Int32.Parse(CityArea1.SelectedValue);
SelectarArea(paid, 1);
}
}我在index.aspx里面调用ContArea.ascx的时候,只能接收到一个值
string _City1 = ContArea1._CityArea1;第一个_City1正确
string _City2= ContArea1._CityArea2;第二个这一句就错误,找不到_CityArea2 也没有_CityArea3帮帮忙啊,大哥们怎么解决
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ContArea.ascx.cs" Inherits="HtmlKj_ContArea" %>
<asp:DropDownList ID="CityArea1" runat="server" AutoPostBack="True"
onselectedindexchanged="CityArea1_SelectedIndexChanged" >
<asp:ListItem Value="25">云南省</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="CityArea2" runat="server" AutoPostBack="True"
onselectedindexchanged="CityArea2_SelectedIndexChanged">
<asp:ListItem Value="0">请选择地区</asp:ListItem>
</asp:DropDownList>
<asp:DropDownList ID="CityArea3" runat="server">
<asp:ListItem Value="0">请选择县市</asp:ListItem>
</asp:DropDownList>
后台代码是这样的:using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
public partial class HtmlKj_ContArea : System.Web.UI.UserControl
{ public string _CityArea1
{
get { return CityArea1.SelectedValue; }
set { CityArea1.SelectedValue = value; }
}
public string _CityArea2
{
get { return CityArea2.SelectedValue; }
set { CityArea2.SelectedValue = value; }
}
public string _CityArea3
{
get { return CityArea3.SelectedValue; }
set { CityArea3.SelectedValue = value; }
}
DataBase dab = new DataBase();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
SelectarArea(0, 0);
}
}
protected void SelectarArea(int parentID,int stype)
{
if (parentID == 0)
{
CityArea1.Items.Clear();
CityArea1.Items.Add(new ListItem("请选择", "0"));
string sql = "select * from [Base_Area] where AreaID=25";
SqlDataReader dr = dab.datareader(sql);
while (dr.Read())
{
CityArea1.Items.Add(new ListItem(dr["AreaName"].ToString(), dr["AreaID"].ToString()));
}
dr.Close();
dab.close();
}
else
{
if (stype == 1)
{
CityArea2.Items.Clear();
CityArea3.Items.Clear();
CityArea3.Items.Add(new ListItem("请选择县市", "0"));
}
else if (stype == 2)
{
CityArea3.Items.Clear();
CityArea3.Items.Add(new ListItem("请选择县市", "0"));
}
else
{
CityArea1.Items.Clear();
}
string sql = "select * from [Base_Area] where ParentID=" + parentID + " and State=0";
SqlDataReader dr = dab.datareader(sql);
while (dr.Read())
{
if (stype == 1)
{
CityArea2.Items.Add(new ListItem(dr["AreaName"].ToString(), dr["AreaID"].ToString()));
}
else if (stype == 2)
{
CityArea3.Items.Add(new ListItem(dr["AreaName"].ToString(), dr["AreaID"].ToString()));
}
else
{
CityArea1.Items.Add(new ListItem(dr["AreaName"].ToString(), dr["AreaID"].ToString()));
}
}
dr.Close();
dab.close();
}
}
protected void CityArea2_SelectedIndexChanged(object sender, EventArgs e)
{
int paid = Int32.Parse(CityArea2.SelectedValue);
SelectarArea(paid, 2);
}
protected void CityArea1_SelectedIndexChanged(object sender, EventArgs e)
{
int paid = Int32.Parse(CityArea1.SelectedValue);
SelectarArea(paid, 1);
}
}我在index.aspx里面调用ContArea.ascx的时候,只能接收到一个值
string _City1 = ContArea1._CityArea1;第一个_City1正确
string _City2= ContArea1._CityArea2;第二个这一句就错误,找不到_CityArea2 也没有_CityArea3帮帮忙啊,大哥们怎么解决
page_load判断if(!page.ispostback)
if (!IsPostBack)
{
//code
}
{
get
{
EnsureChildControl();
.......
}
set{
EnsureChildControl();
.......
}
}如果你的写法是从哪一本入门书或者视频上学来的,我建议你将那本书或者视频网站定位为“坑害初学者”的。这个EnsureChildControl机制确实是asp.net组件开发中所不允许忽视的基本知识。
也许你确实没有仔细看楼主的代码,了解他的需求,这一点不怪你哈
你站的高度与我们不同,所以不要把“将那本书或者视频网站定位为“坑害初学者”的”这样话说得太绝对,也许你是把asp.net的控件研究透彻了,但是这不一定代表你有这个权利说这种大话,也看过多本书多种资料(不属于你这样的“研究”人员),但是在一般应用中,比如就是普通的简单的用户控件中很多时候根本就不需要EnsureChildControl,翻了很多控件代码,都很少看到使用该方法的,当然根据ensure这个方法来看,是在复合控件中才用到,目的很简单,不用它也完全可以的。总之,不常用的,大家都少于知道的你拿出来就当宝,让别人觉得你很高深,当然sp前辈确实是学识渊博无可厚非,感觉这样实在是不好啊