簡體   English   中英

.ascx頁中無法識別ID

[英]ID not recognized in .ascx page

我有以下代碼:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DurationPicker.ascx.cs" Inherits="Permias.DurationPicker" %>
<%@ Register TagPrefix="Club" Namespace="ClubSite" %>
<div class="controlblock">
    <table>
        <tr>
            <td>
                Start Date:
            </td>
            <td>
                <Club:DatePicker ID="dp1" runat="server" />
            </td>
            <td>
                <Club:TimePicker ID="tp1" runat="server" />
            </td>
        </tr>
        <tr>
            <td>
                End Date:
            </td>
            <td>
                <Club:DatePicker ID="dp2" runat="server" />
            </td>
            <td>
                <Club:TimePicker ID="tp2" runat="server" />
            </td>
        </tr>
    </table>
</div>

在我后面的代碼中

public System.DateTime startDateTime
    {
        get
        {
            return dp1.SelectedDate.Add(tp1.SelectedTime.TimeOfDay);
        }
        set
        {
            dp1.SelectedDate = value;
            tp1.SelectedTime = value;
        }
    }

但是dp1用紅色下划線標出,這意味着它找不到dp1。為什么?

您需要@Register指令中的更多信息。 該控件位於何處? 程序集引用或src引用。

dp1必須在您的后台代碼中定義。 您是否依靠設計師在后面的代碼中創建一個字段? 如果是這樣,也許它沒有在DurationPicker.ascx.designer.cs文件中創建dp1引用。 您將需要這樣的一行:

protected ClubSite.DatePicker dp1;

這些似乎都不能解決我的問題。

在我的解決方案中,我有一個App_Code文件夾,並且在其中有DataPicker.cs,它位於名稱空間ClubSite下

namespace ClubSite
{
    public static class commonScript
    {

        public static void WritePopupRoutines(System.Web.UI.Page Page)
        {
            StringBuilder sb = new StringBuilder();
            sb = new StringBuilder();
            sb.AppendLine("var __popup_panel;");

            sb.AppendLine("function __popup_clear() {");
            sb.AppendLine(" if (__popup_panel != null ) ");
            sb.AppendLine(" {");
            sb.AppendLine(" document.getElementById(__popup_panel).style.display='none';");
            sb.AppendLine(" __popup_panel=null;");
            sb.AppendLine(" }");
            sb.AppendLine("}");
            sb.AppendLine("function __popup_losefocus(panel)");
            sb.AppendLine("{");
            sb.AppendLine(" if (!panel.contains(document.activeElement))");
            sb.AppendLine(" {");
            sb.AppendLine(" panel.style.display='none';");
            sb.AppendLine(" }");
            sb.AppendLine("}");

            Page.ClientScript.RegisterClientScriptBlock(Page.GetType(), "PopupRoutines", sb.ToString(), true);
        }
    }

    public class DatePicker : WebControl, INamingContainer
    {
        private Calendar _innerCal;
        private TextBox _innerTbx;
        private string errorText = null;
        private bool _panelvisible = false;

        public DatePicker() : base(HtmlTextWriterTag.Div)
        {

        }

        public System.DateTime SelectedDate
        {
            get
            {
                EnsureChildControls();
                System.DateTime d=System.DateTime.Now;
                try
                {
                    d = System.DateTime.Parse(_innerTbx.Text);
                    errorText = null;
                    _innerCal.SelectedDate = d;
                }
                catch
                {
                    errorText = "Date needs to be specified as mm/dd/yyyy";
                }
                return d;
            }
            set
            {
                EnsureChildControls();
                _innerCal.SelectedDate = value;
                _innerTbx.Text = value.ToShortDateString();
            }
        }

        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            _innerTbx = new TextBox();
            this.Controls.Add(_innerTbx);

            _innerCal = new Calendar();
            _innerCal.SelectionChanged += new System.EventHandler(_innerCal_SelectionChanged);
            _innerCal.VisibleMonthChanged += new MonthChangedEventHandler(_innerCal_MonthChanged);
            Controls.Add(_innerCal);
        }

        protected override System.Web.UI.HtmlTextWriterTag TagKey
        {
            get
            {
                return HtmlTextWriterTag.Div;
            }
        }

        protected override void AddAttributesToRender(System.Web.UI.HtmlTextWriter writer)
        {
            if (this.Width.IsEmpty)
            {
                this.Width = new Unit(150);
            }
            base.AddAttributesToRender(writer);
        }

        protected override void RenderContents(System.Web.UI.HtmlTextWriter writer)
        {
            _innerTbx.Attributes.Add("Align", "AbsMiddle");
            _innerTbx.Width = new Unit(100);
            _innerTbx.RenderControl(writer);

            string innerid = this.UniqueID + "_inner";

            writer.AddAttribute("Align", "AbsMiddle");
            writer.AddAttribute("src", "images/dropdownbtn.gif");
            writer.AddAttribute("onClick", "__datepicker_showpopup('" + innerid + "')");
            writer.RenderBeginTag(HtmlTextWriterTag.Img);
            writer.RenderEndTag();

            if (errorText != null)
            {
                writer.AddStyleAttribute("color", "red");
                writer.AddStyleAttribute("display", "block");
                writer.RenderBeginTag(HtmlTextWriterTag.Span);
                writer.Write(errorText);
                writer.RenderEndTag();
            }

            writer.AddStyleAttribute("position", "relative");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);

            writer.AddStyleAttribute("position", "absolute");
            writer.AddStyleAttribute("left", "0px");
            writer.AddStyleAttribute("top", "0px");
            writer.AddStyleAttribute("z-index", "100");

            string panelvisible = _panelvisible ? "block" : panelvisible = "none";

            writer.AddStyleAttribute("display", panelvisible);
            writer.AddStyleAttribute("background-color", "white");
            writer.AddAttribute("id", innerid);
            writer.AddAttribute("onfocusout", "__popup_losefocus(this)");
            writer.RenderBeginTag(HtmlTextWriterTag.Div);

            _innerCal.RenderControl(writer);

            writer.RenderEndTag();
            writer.RenderEndTag();
        }

        protected override void OnPreRender(System.EventArgs e)
        {
            base.OnPreRender(e);
            commonScript.WritePopupRoutines(Page);
            StringBuilder sb = new StringBuilder();
            if (_panelvisible)
            {
                sb.AppendLine("__popup_panel = '" + this.UniqueID + "_inner';");
            }
            sb.AppendLine("function __datepicker_showpopup(name)");
            sb.AppendLine("{");
            sb.AppendLine(" if (__popup_panel != null)");
            sb.AppendLine(" {");
            sb.AppendLine(" document.getElementById(__popup_panel).style.display='none';");
            sb.AppendLine(" }");
            sb.AppendLine(" __popup_panel=name;");
            sb.AppendLine(" var panel=document.getElementById(__popup_panel);");
            sb.AppendLine(" panel.style.display='block';");
            sb.AppendLine(" var links=panel.getElementsByTagName('A');");
            sb.AppendLine(" links[0].focus();");
            sb.AppendLine(" window.event.cancelBubble=true;");
            sb.AppendLine("}");
            Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "popup", sb.ToString(), true);
            Page.MaintainScrollPositionOnPostBack = true;
        }

        private void _innerCal_SelectionChanged(object sender, System.EventArgs e)
        {
            EnsureChildControls();
            _innerTbx.Text = _innerCal.SelectedDate.ToShortDateString();
        }

        private void _innerCal_MonthChanged(object sender, MonthChangedEventArgs e)
        {
            _panelvisible = true;
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM