0

aspx ページに dsucTopLeft と dsucTopRight の 2 つのユーザー コントロールがあります。各ユーザー コントロールには、値を選択するためのドロップダウン リストがあります。

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 を設定するコードは (まだ) 実行されません。これを行うことで解決できます:

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

代わりにそのプロパティを呼び出します。また、selectedindexchanged イベント ハンドラーでそのプロパティを使用できます。

于 2012-07-08T07:28:04.483 に答える