写了个评分的控件,想用来实现星级评分的功能,控件如下:
<asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal"
Width="100px">
<ItemTemplate>
<asp:ImageButton ID="ibtstar" runat="server"
CommandArgument=<%#Container.ItemIndex+1 %> ImageUrl="~/images/stars4.png"
onclick="ibtstar_Click" Enabled="false" />
</ItemTemplate>
</asp:DataList>
后台:public partial class EvaluationWithoutUpdatePanel : System.Web.UI.UserControl
{
int _stars;
bool _enableevaluation;
protected void Page_Load(object sender, EventArgs e)
{
CreateData();
} void CreateData()
{
DataTable dt = new DataTable();
dt.Columns.Add("stars");
for (int i = 0; i < 5; i++)
{
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
}
DataList1.DataSource = dt;
DataList1.DataBind();
for (int j = 0; j < _stars; j++)
{
ImageButton ibt = DataList1.Items[j].FindControl("ibtstar") as ImageButton;
ibt.ImageUrl = "~/images/star1.png";
}
for (int i = 0; i < DataList1.Items.Count; i++)
{
ImageButton ibt = DataList1.Items[i].FindControl("ibtstar") as ImageButton;
if (ibt != null)
{
ibt.Enabled = _enableevaluation;
}
}
} public int Stars
{
get { return _stars; }
set { _stars= value; }
} public bool EnableEvaluation
{
set { _enableevaluation = value; }
} protected void ibtstar_Click(object sender, ImageClickEventArgs e)
{
ImageButton ibt = sender as ImageButton;
if (ibt != null)
{
_stars = Convert.ToInt32(ibt.CommandArgument);
}
CreateData();
}
}
调用它的父控件:<asp:GridView ID="grid" runat="server" AutoGenerateColumns="False">
<ItemTemplate>
<uc3:EvaluationWithoutUpdatePanel ID="EvaluationWithoutUpdatePanel1"
runat="server" Stars=<%#Convert.ToInt32(Eval("pingjia").ToString()) %> EnableEvaluation="false" />
</ItemTemplate>
</asp:GridView>
后台只是简单的绑定,另外还有个查询按钮。
问题:
页面加载的时候,没有任何问题,一切显示正常。
点父页面查询按钮的时候,控件取到的Stars属性值,通过调试是正常的,但是到了实际用到变量_stars的时候,值都是0,是代码哪里有问题呢,还是哪里需要改进呢?
先谢谢大家了。
<asp:DataList ID="DataList1" runat="server" RepeatDirection="Horizontal"
Width="100px">
<ItemTemplate>
<asp:ImageButton ID="ibtstar" runat="server"
CommandArgument=<%#Container.ItemIndex+1 %> ImageUrl="~/images/stars4.png"
onclick="ibtstar_Click" Enabled="false" />
</ItemTemplate>
</asp:DataList>
后台:public partial class EvaluationWithoutUpdatePanel : System.Web.UI.UserControl
{
int _stars;
bool _enableevaluation;
protected void Page_Load(object sender, EventArgs e)
{
CreateData();
} void CreateData()
{
DataTable dt = new DataTable();
dt.Columns.Add("stars");
for (int i = 0; i < 5; i++)
{
DataRow dr = dt.NewRow();
dt.Rows.Add(dr);
}
DataList1.DataSource = dt;
DataList1.DataBind();
for (int j = 0; j < _stars; j++)
{
ImageButton ibt = DataList1.Items[j].FindControl("ibtstar") as ImageButton;
ibt.ImageUrl = "~/images/star1.png";
}
for (int i = 0; i < DataList1.Items.Count; i++)
{
ImageButton ibt = DataList1.Items[i].FindControl("ibtstar") as ImageButton;
if (ibt != null)
{
ibt.Enabled = _enableevaluation;
}
}
} public int Stars
{
get { return _stars; }
set { _stars= value; }
} public bool EnableEvaluation
{
set { _enableevaluation = value; }
} protected void ibtstar_Click(object sender, ImageClickEventArgs e)
{
ImageButton ibt = sender as ImageButton;
if (ibt != null)
{
_stars = Convert.ToInt32(ibt.CommandArgument);
}
CreateData();
}
}
调用它的父控件:<asp:GridView ID="grid" runat="server" AutoGenerateColumns="False">
<ItemTemplate>
<uc3:EvaluationWithoutUpdatePanel ID="EvaluationWithoutUpdatePanel1"
runat="server" Stars=<%#Convert.ToInt32(Eval("pingjia").ToString()) %> EnableEvaluation="false" />
</ItemTemplate>
</asp:GridView>
后台只是简单的绑定,另外还有个查询按钮。
问题:
页面加载的时候,没有任何问题,一切显示正常。
点父页面查询按钮的时候,控件取到的Stars属性值,通过调试是正常的,但是到了实际用到变量_stars的时候,值都是0,是代码哪里有问题呢,还是哪里需要改进呢?
先谢谢大家了。
{
get { return _stars; }
set { _stars= value; }
}
没有取回发的值
http://school.itzcn.com/index.html#
上面有相关信息,希望对楼主有所帮助。
{
if(!ispostback){
CreateData();
}
}
你去掉后,每次回发,int _stars这个值都会重新初始化,默认值是0,所以你就取出来0了嘛
去掉了会造成控件不显示。CreateData方法里有生成五角星和控制五角星的方法。
还是不太会改。