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

I ended up going another route with this request. None of the proposed solutions worked and I never could get it to work. One option we looked at was creating a custom table to build the control. We ended up changing where the information was changed and just used the calendar control as the display mechanism.

Sorry for the delay!

于 2011-04-07T19:18:26.203 回答
0

检查 AutoEventWireup 是否设置为 true 即

AutoEventWireup="true"
于 2011-01-26T16:04:03.410 回答
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 回答