0

我有两个用户控件:aspx 页面中的 dsucTopLeft 和 dsucTopRight。每个用户控件都有一个下拉列表来从中选择值。

aspx 页面有一个“保存”按钮。

在按钮的 OnClickEvent 中,我从那些用户控件(返回下拉列表中的值)中获取数据。我需要将这些值插入数据库。但是,单击按钮后这些值设置为 0。

我将如何保留这些价值观?

代码:

父模板.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。

4

1 回答 1

0

if (!Page.IsPostBack)从_

    if (!Page.IsPostBack)
    {
        dsuc[0]=dsucTopLeft;
        dsuc[1]=dsucTopRight;
    }

如果没有,它只会在不回发时填充它。当单击产生回发时,您将希望执行该代码:)

此外,可能是您clickp event is being called beforeselectedindexchanged 。在这种情况下,设置 chartId 的代码在触发 click 事件时(尚未)执行。你可以解决这个问题:

public int ChartId { get { return int.Parse(chartDropDownList.SelectedItem.Value); }}

并改为调用该属性。此外,您可以在 selectedindexchanged 事件处理程序中使用该属性

于 2012-07-08T07:28:04.483 回答