ASP.Net:元素<name>不是已知元素</name>

时间:2009-08-11 20:30:48

标签: vb.net asp.net-2.0 autocompleteextender

我一直在尝试使用ASP.NET Ajax控件工具包中的AutoComplete Extender,但是我在实际工作中遇到了很多麻烦。

要安装AjaxControlToolKit,我将它放在我的应用程序的bin directoy中,然后我将控件拖放到表单中。但是,它一直在说,

“元素'AutoCompleteExtender'不是已知元素”

首先,我以为我还没有注册,但当我看到标题时,它已经存在了:

<%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral,PublicKeyToken=31bf3856ad364e35" Namespace="System.Web.UI" TagPrefix="asp" %>

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" tagprefix="ajaxToolkit"%>

所以我根本不确定,为什么它仍然给我带来麻烦。

我的bin文件夹中的其他程序集文件包括:

System.Web.Extensions.ddl System.Web.Extensions.Design.dll

这是我的代码:

<asp:TextBox ID="txtOrganization" runat="server" Width ="500px" MaxLength ="250"></asp:TextBox>
<asp:ScriptManager ID="ScriptManager1" runat="server">
    <Services>
        <asp:ServiceReference Path="AutoComplete.asmx" />
    </Services>
</asp:ScriptManager>
<ajaxToolkit:AutoCompleteExtender runat="server" TargetControlID="txtOrganization" ServiceMethod="GetOrganizationList" ServicePath="AutoComplete.asmx"></ajaxToolkit:AutoCompleteExtender>

3 个答案:

答案 0 :(得分:1)

我修好了它,让它运转起来。我不得不对我的aspx页面和web.config进行更改。

ASPX: 将其添加到我的页面顶部:

<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" tagprefix="ajaxToolkit"%>

我的控件现在看起来像这样:

        <asp:TextBox ID="txtOrganization" runat="server" Width ="500px" MaxLength ="250"></asp:TextBox>
        <asp:ScriptManager ID="ScriptManager1" runat="server" >
            <Services>
                <asp:ServiceReference Path="AutoComplete.asmx" />
            </Services>
        </asp:ScriptManager>
        <ajaxToolkit:AutoCompleteExtender runat="server" ID="AutoComplete1" 
                                          TargetControlID="txtOrganization" 
                                          ServicePath="AutoComplete.asmx" ServiceMethod="GetOrganizationList"
                                          MinimumPrefixLength="1" EnableCaching="true"
                                          FirstRowSelected="true">
        </ajaxToolkit:AutoCompleteExtender>

至于我的web.config,我添加了以下内容:

<configSections>
    <sectionGroup name="system.web.extensions" type="System.Web.Configuration.SystemWebExtensionsSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
        <sectionGroup name="scripting" type="System.Web.Configuration.ScriptingSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
            <section name="scriptResourceHandler" type="System.Web.Configuration.ScriptingScriptResourceHandlerSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
            <sectionGroup name="webServices" type="System.Web.Configuration.ScriptingWebServicesSectionGroup, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35">
                <section name="jsonSerialization" type="System.Web.Configuration.ScriptingJsonSerializationSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="Everywhere"/>
                <section name="profileService" type="System.Web.Configuration.ScriptingProfileServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
                <section name="authenticationService" type="System.Web.Configuration.ScriptingAuthenticationServiceSection, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" requirePermission="false" allowDefinition="MachineToApplication"/>
            </sectionGroup>
        </sectionGroup>
    </sectionGroup>
</configSections>

<system.web>
    <pages>
        <controls>
            <add tagPrefix="asp" namespace="System.Web.UI" assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </controls> 
    </pages>
    <customErrors mode="Off"/>
    <compilation debug="true" strict="false" explicit="true">
        <assemblies>
            <add assembly="System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
            <add assembly="System.Web.Extensions.Design, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            <add assembly="System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B03F5F7F11D50A3A"/>
            <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089"/>
        </assemblies>               
    </compilation>
    <httpHandlers>
        <remove verb="*" path="*.asmx"/>
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
    </httpHandlers>
    <httpModules>
        <add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </httpModules>
    <sessionState mode="InProc" cookieless="false" timeout="240"/>
    <!--
        The <authentication> section enables configuration 
        of the security authentication mode used by 
        ASP.NET to identify an incoming user. 
    -->
    <authentication mode="Forms"/>
    <!--
        The <customErrors> section enables configuration 
        of what to do if/when an unhandled error occurs 
        during the execution of a request. Specifically, 
        it enables developers to configure html error pages 
        to be displayed in place of a error stack trace.

    <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
        <error statusCode="403" redirect="NoAccess.htm" />
        <error statusCode="404" redirect="FileNotFound.htm" />
    </customErrors>
    -->
    <httpRuntime maxRequestLength="16000" useFullyQualifiedRedirectUrl="true" executionTimeout="180"/>
</system.web>
<system.web.extensions>
    <scripting>
        <webServices>
            <!-- Uncomment this line to customize maxJsonLength and add a custom converter -->
            <!--
  <jsonSerialization maxJsonLength="500">
    <converters>
      <add name="ConvertMe" type="Acme.SubAcme.ConvertMeTypeConverter"/>
    </converters>
  </jsonSerialization>
  -->
            <!-- Uncomment this line to enable the authentication service. Include requireSSL="true" if appropriate. -->
            <!--
    <authenticationService enabled="true" requireSSL = "true|false"/>
  -->
            <!-- Uncomment these lines to enable the profile service. To allow profile properties to be retrieved
       and modified in ASP.NET AJAX applications, you need to add each property name to the readAccessProperties and
       writeAccessProperties attributes. -->
            <!--
  <profileService enabled="true"
                  readAccessProperties="propertyname1,propertyname2"
                  writeAccessProperties="propertyname1,propertyname2" />
  -->
        </webServices>
        <!--
  <scriptResourceHandler enableCompression="true" enableCaching="true" />
  -->
    </scripting>
</system.web.extensions>
<system.webServer>
    <validation validateIntegratedModeConfiguration="false"/>
    <modules>
        <add name="ScriptModule" preCondition="integratedMode" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </modules>
    <handlers>
        <remove name="WebServiceHandlerFactory-Integrated"/>
        <add name="ScriptHandlerFactory" verb="*" path="*.asmx" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add name="ScriptHandlerFactoryAppServices" verb="*" path="*_AppService.axd" preCondition="integratedMode" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        <add name="ScriptResource" preCondition="integratedMode" verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </handlers>
</system.webServer>

最初,因为我使用的是asp.net 2.0,所以System.Web.Extensions的版本号是1.6 ....所以我不得不将它全部改为3.5.0.0。

此外,在搜索解决方案时,很多人说我必须将System.Web.Extensions.dll和System.Web.Extensions.Design.dll的副本放入bin文件夹。我不必这样做,我只是添加了对它们的引用。

答案 1 :(得分:0)

您是否为项目添加了对它的引用? 在Visual Studio中右键单击项目...命中属性 在引用旁边,您应该看到AjaxControlToolkit ... 如果没有,请点击添加...进入浏览选项卡并选择它。

我假设没有其他控件可以使用?

答案 2 :(得分:0)

您是否在页面顶部放置了ScriptManager?您必须这样做才能使Toolkit控件正常工作。

编辑:此问题有很多潜在原因;您没有正确安装AJAX工具包,您的站点中存在编译错误等。一个更常见的问题是您需要在web.config文件中声明工具包。在页面标记内,添加以下内容:

<controls>
<add tagPrefix="ajaxToolkit" namespace="AjaxControlToolkit" assembly="AjaxControlToolkit"/>
</controls>