我有两个用户控件:aspx页面中的dsucTopLeft和dsucTopRight。每个用户控件都有一个下拉列表,用于从中选择值。
aspx页面有一个“保存”按钮。
在按钮的OnClickEvent中,我从这些用户控件(从下拉列表返回值)中获取数据。我需要将这些值插入数据库。但是,单击按钮后,这些值设置为0.
我如何保留这些值?
代码:
ParentTemplate.aspx
<div class="leftDashboard">
<uc:dsuc ID="dsucTopLeft" runat="server" />
</div>
<div id="rightDashboard">
<uc:dsuc ID="dsucTopRight" runat="server" />
</div>
它还有一个按钮:
<asp:Button ID="SaveButton" runat="server" OnClick="SaveButton_Click" Text="Save Dashboard" />
这是按钮的代码隐藏:
protected void SaveButton_Click(object sender, EventArgs e)
{
//If the mode is "CREATE", then it needs to insert the information about dashboard and the charts it contains
for (int i = 0; i < dsuc.Length; i++)
{
dsuc[i].dashboardId = dashboardId;
if (dsuc[i].chartId != 0) //Here, the chartId remains 0
dsuc[i].insert();
}
}
dsuc是一个数组。它的填充方式如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
dsuc[0]=dsucTopLeft;
dsuc[1]=dsucTopRight;
}
}
用户控件:
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
initializeDropDownList();//It initializes the drop down list
}
}
public void insert()
{
//It inserts into database
}
protected void chartDDLSelectedIndexChanged(object sender, EventArgs e)
{
oldChartId = chartId;
String chartTitle = chartDropDownList.SelectedItem.Text;
if (chartTitle != dropDownMessage)
{
chartId = int.Parse(chartDropDownList.SelectedItem.Value);
//Chart user control should be retrieved from the database and drawn.
chartTitleLabel.Text += "chart id : " + chartId.ToString() + " title: " + chartTitle;
//chartUserControl.Visible = true;
}
}
当选择了下拉列表中的项目时,用户控件即dsuc []的类更改其chartId。我打印了这个值,它有效。但是当点击按钮时,相同的值变为0。
答案 0 :(得分:0)
从
中删除if (!Page.IsPostBack)
if (!Page.IsPostBack)
{
dsuc[0]=dsucTopLeft;
dsuc[1]=dsucTopRight;
}
如果没有,它只会在没有回发时填充它。当点击产生回发后,您将希望执行该代码:)
此外,可能是您clickp event is being called before
selectedindexchanged`。在这种情况下,触发click事件时,尚未执行设置chartId的代码。你可以解决这个问题:
public int ChartId { get { return int.Parse(chartDropDownList.SelectedItem.Value); }}
并调用该属性。此外,您可以在selectedindexchanged事件处理程序
中使用该属性