0

システムのユーザーに日付と日付を表示するための単純な UI であるカレンダーを作成しようとしています。カレンダーの「DayRender」イベントをオーバーライドして各セルにアクセスし、特定のデータを表示するためにいくつかの動的コントロールを挿入しました。コントロールの表示はうまく機能します。ただし、最近、コマンド引数を使用して LinkBut​​ton を追加し、イベントをキャプチャして他のロジックを実行し、UI を変更したいと考えました。LinkBut​​ton が適切に表示されるようになり、ID が割り当てられた単純な "" タグとしてレンダリングされます。ただし、リンクをクリックしても何も起こらず、リンクの通常の「href='...javascript action...'」部分が生成されていないようです。これはすべて、ページ ライフ サイクルの Day Render 段階でコントロールを追加しているという事実によるものだと感じています。しかし、その場合、コントロールはおそらくまったく表示されないでしょう。

クリック アクションが追加されていないのに、テキストと他のすべてが追加されている理由についてのアイデアはありますか? コードは以下です。

御時間ありがとうございます

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
    {
        if (Schedule != null)
        {
            var dayReq = from day in Schedule
                         where day.RequiredDate == e.Day.Date
                         where day.RequiredQty != 0
                         select day;

            if (dayReq.FirstOrDefault() != null)
            {
                //Open the Date
                e.Cell.Controls.Add(new LiteralControl("<br /><div class=\"auth-sched-req\">Req Qty: <strong>" + String.Format("{0:#,#.###}", dayReq.FirstOrDefault().RequiredQty) + "</strong><br />Prom Date: "));

                //Create a link button for the promise date
                LinkButton lb = new LinkButton();
                lb.ID = dayReq.FirstOrDefault().ItemId.ToString();
                lb.Text = dayReq.FirstOrDefault().RequiredDate.ToShortDateString();
                lb.CommandName = "ShowPromise";
                lb.CommandArgument = dayReq.FirstOrDefault().ItemId.ToString();
                lb.Command +=new CommandEventHandler(lb_Command);
                e.Cell.Controls.Add(lb);

                //Close the Date
                e.Cell.Controls.Add(new LiteralControl("</div>"));
            }
        }
    }

    protected void lb_Command(Object sender, CommandEventArgs e)
    {
        //Do some magic here
        Response.Write(e.CommandArgument.ToString());
    }
4

3 に答える 3

0

AutoEventWireupがtrueに設定されているかどうかを確認します。

AutoEventWireup="true"
于 2011-01-26T16:04:03.410 に答える
0

私はこのリクエストで別のルートに行くことになりました。提案されたソリューションはどれも機能せず、機能させることができませんでした。私たちが検討したオプションの 1 つは、コントロールを構築するためのカスタム テーブルを作成することでした。情報が変更された場所を変更することになり、カレンダー コントロールを表示メカニズムとして使用しただけです。

遅れて申し訳ありません!

于 2011-04-07T19:18:26.203 に答える
0

これを試して

<script type="text/javascript">
    function calendarClick(day) {
        document.getElementById('<%= hfValue.ClientID %>').value = day;
        document.getElementById('<%= ghostButton.ClientID %>').click();
    }
</script>
<asp:Button ID="ghostButton" runat="server" Style="display: none" OnClick="ghostButton_Click" />
<asp:HiddenField ID="hfValue" runat="server" />

コードビハインド:

protected void Calendar1_DayRender(object sender, DayRenderEventArgs e)
{
    // ...
    e.Cell.Attributes["onclick"] = string.Format("calendarClick({0})", dayReq.FirstOrDefault().ItemId.ToString());
    // ...
}
protected void ghostButton_Click(object sender, EventArgs e1)
{
    string value = hfValue.Value;
    // ...
}
于 2010-10-05T02:27:05.453 に答える