【发布时间】:2015-08-11 20:13:42
【问题描述】:
我有一个动态创建的 RadioButtonList。
我已启用 AutoPostBack,因为我想在所选值更改时动态创建更多控件。
当我尝试在 Page_Load 中检索选定的值时,它似乎返回的是先前选定的值而不是当前选定的值。
protected void Page_Load(object sender, EventArgs e)
{
draw_site_select();
if (!IsPostBack)
{
Response.Write(((RadioButtonList)Panel1.FindControl("rbl_site")).SelectedValue);
}
}
void draw_site_select()
{
using (Circles_DatabaseDataContext db = new Circles_DatabaseDataContext())
{
var sites = from r in db.circle_sites select r;
RadioButtonList rbl = new RadioButtonList();
rbl.ID = "rbl_site";
rbl.DataSource = sites;
rbl.DataValueField = "circle_site_id";
rbl.DataTextField = "circle_site_name";
rbl.DataBind();
rbl.RepeatDirection = RepeatDirection.Horizontal;
rbl.AutoPostBack = true;
Panel1.Controls.Add(rbl);
}
}
作为一种解决方法,我向 RadioButtonList 添加了一个事件处理程序
void rb_CheckedChanged(object sender, EventArgs e)
{
Response.Write(((RadioButtonList)sender).SelectedValue);
}
这可行,但是当另一个对象导致回发时,我必须处理值的检索。
我想出了以下代码;
protected void Page_Load(object sender, EventArgs e)
{
draw_site_select();
if (!IsPostBack && !Request.Params["__EVENTTARGET"].ToString().Contains("rbl_site"))
{
Response.Write(((RadioButtonList)Panel1.FindControl("rbl_site")).SelectedValue);
}
}
但这一切都像是一种解决方法。有人可以解释这里发生了什么以及我应该如何解决这个问题吗?
【问题讨论】:
-
谁给
draw_site_select打电话,更重要的是,什么时候打电话? -
对不起,“作为一种解决方法,我向 RadioButtonList 添加了一个事件处理程序”可能不够清楚......我的意思是我在“rbl_site”的创建中添加了一行代码
rbl.SelectedIndexChanged += rb_CheckedChanged;
标签: c# asp.net postback autopostback