我有两个页面使用相同代码的'UpdatePanel,ScriptManager和CalendarExtender , in one of them, the
CalendarExtender`工作正常,但另一方面,它给了我这个错误:
CalendarExtender is not a known Element
这是aspx
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolKit" TagPrefix="asp" %>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder2" runat="server">
<div id="conteudo" style="text-align: left">
<fieldset id="fieldset" style="width:730px; margin-left: -200px">
<legend style="text-align:center;"><b>Detalhes do Chamado</b></legend>
<div id="DetalhesChamado">
<asp:ScriptManager ID="ScriptManager1" runat="server" EnableScriptGlobalization="true" EnableScriptLocalization="true" EnablePartialRendering="true"></asp:ScriptManager>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
//Here is a gridview
<asp:CalendarExtender runat="server"></asp:CalendarExtender>
但仍然给出错误......
- 更新2--
现在我收到了这个错误:
The TargetControlID of 'CalendarExtender1' is not valid. A control with ID 'TxtPrevisao' could not be found.
我的新代码:
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="TxtPrevisao" runat="server" Width="115px"></asp:TextBox>
<asp:CalendarExtender ID="CalendarExtender1" runat="server" Format=" dd ,MMMM ,yyyy" TargetControlID="TxtPrevisao" PopupButtonID="TxtPrevisao" CssClass="MyCalendar">
</asp:CalendarExtender>
</ItemTemplate>
</asp:TemplateField>
答案 0 :(得分:3)
更改Ajax-Kit的Tag-Prefix,看看它是否有效
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="act" %>
还有:
<act:CalendarExtender runat="server"></act:CalendarExtender>
asp用于Asp.Net组件,如UpdatePanel
------------更新2 -------------------
对于新的错误,您无法将PopupButtonID分配给文本框,您需要一个ImageButton
<asp:ImageButton ID="btnCalenderPopup" runat="server" ImageUrl="App_Themes/Standard/Img/calendar.png" CausesValidation="False" />
仍然,我坚持认为,你需要正确地为Took-Kit分配Tag-Prefix,你需要正确引用装配,因为SanjeevRai说
答案 1 :(得分:1)
您必须在项目中添加“Ajaxtoolkit”dll的引用。看起来它没有得到'AjaxToolkit'DLL的正确引用。
您可以通过右键单击网站并选择“属性页”选项来检查项目的引用。然后它会告诉你所有的参考资料。从这里你可以检查你的项目中是否有“Ajaxtoolkit”引用退出。
如果您的项目中不存在Ajaxtoolkit引用,那么您必须先添加此引用!
------------更新2 -------------------
在查看您的代码后,我遇到了问题。
实际上你在gridview中使用了calenderextender及其TargetControlID文本框,因此它没有得到textbox的id。它永远不会直接在aspx页面上识别子控件ID。 你需要在gridview的RowDataBound事件中运行时附加'TargetControlID'和'PopupButtonID'。
以下是您可以在aspx.cs文件中使用的代码示例:
void myGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
TextBox txt = (TextBox)e.Row.FindControl("TxtPrevisao");
CalendarExtender Calendar1 = (CalendarExtender)e.Row.FindControl("CalendarExtender1");
Calendar1.TargetControlID=txt.ID;
Calendar1.PopupButtonID=txt.ID;
}
}
在.aspx页面中,将rowdatabound事件附加到网格,并从calenderextender中删除'TargetControlID'和'PopupButtonID'属性,即
<asp:TemplateField>
<ItemTemplate>
<asp:TextBox ID="TxtPrevisao" runat="server" Width="115px"></asp:TextBox>
<asp:CalendarExtender ID="CalendarExtender1" runat="server" Format=" dd ,MMMM ,yyyy" CssClass="MyCalendar">
</asp:CalendarExtender>
</ItemTemplate>
</asp:TemplateField>