首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ControlParameter找不到UserControl中的控件

ControlParameter找不到UserControl中的控件
EN

Stack Overflow用户
提问于 2012-04-05 03:27:59
回答 1查看 2.9K关注 0票数 2

我是ASP.NET的新手,但一直在前进,到目前为止,通过一些研究,我能够克服所有的障碍。但我有一个小问题,我似乎无法解决,涉及到我创建的自定义控件。

该控件是一个通过JQuery弹出的小部件,其中包含允许用户对结果集进行过滤的控件。我将这个弹出窗口的所有元素都嵌入到两个特定的页面中,这两个页面都工作得很好。我决定创建一个自定义控件,据我所知,在目标页面上使用带有Control' directive and a注册指令的ascx文件创建自定义控件是正确的,所以:

代码语言:javascript
复制
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PopUp_TopicFilterControl.ascx.cs" Inherits="POD.PopUp_TopicFilterControl" %>

代码语言:javascript
复制
<%@ Register TagPrefix="popup" TagName="TopicFilterControl" Src="~/Controls/PopUp_TopicFilterControl.ascx" %>

“`main”页面包含一个对象数据源,它需要引用我的自定义控件中的控件以获取其选择参数。以下是数据源:

代码语言:javascript
复制
<asp:ObjectDataSource ID="TopicDataSource" runat="server" SelectMethod="GetRecentTopics" TypeName="POD.App_Objects.Topic">
    <SelectParameters>
        <asp:Parameter DefaultValue="12" Name="select_limit" Type="Int32" />
        <asp:ControlParameter DefaultValue="" ControlID="TopicCategoryFilterList" Name="category" Type="String" />
        <asp:ControlParameter DefaultValue="" ControlID="TopicCreatorFilterList" Name="creator" Type="Int32" />
        <asp:ControlParameter DefaultValue="" ControlID="TopicDateAfterFilterText" Name="date_after" Type="String" />
        <asp:ControlParameter DefaultValue="" ControlID="TopicDateBeforeFilterText" Name="date_before" Type="String" />
    </SelectParameters>
</asp:ObjectDataSource>

下面是自定义控件的主体:

代码语言:javascript
复制
<asp:Panel id="TopicFilter_Panel" runat="server" CssClass="PopUp" ClientIDMode="Static" EnableTheming="False" EnableViewState="False" ViewStateMode="Disabled">
    <asp:Panel runat="server" CssClass="PopUp_Heading">
        <h1><a id="TopicFilter_Close" href="#">Close [X]</a></h1>
    </asp:Panel>
    <asp:Panel runat="server" CssClass="PopUp_Body">
        <asp:Table runat="server">
            <asp:TableRow runat="server">
                <asp:TableCell runat="server" HorizontalAlign="Right">
                    By Category:
                </asp:TableCell>
                <asp:TableCell runat="server">
                    <asp:DropDownList
                        ID="TopicCategoryFilterList"
                        runat="server"
                        DataSourceID="TopicCategoryDataSource"
                        DataTextField="value"
                        DataValueField="value"
                        AppendDataBoundItems="True"
                        AutoPostBack="False">
                        <asp:ListItem Selected="True" Value="">&mdash; All &mdash;</asp:ListItem>
                    </asp:DropDownList>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow runat="server">
                <asp:TableCell runat="server" HorizontalAlign="Right">
                    By Author:
                </asp:TableCell>
                <asp:TableCell runat="server">
                    <asp:DropDownList
                        ID="TopicCreatorFilterList"
                        runat="server"
                        DataSourceID="UserDataSource"
                        DataTextField="person_name_full"
                        DataValueField="user_id"
                        AppendDataBoundItems="True"
                        AutoPostBack="False">
                        <asp:ListItem Selected="True" Value="">&mdash; All &mdash;</asp:ListItem>
                    </asp:DropDownList>
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow runat="server">
                <asp:TableCell runat="server" HorizontalAlign="Right">
                    By Date (After):
                </asp:TableCell>
                <asp:TableCell runat="server">
                    <asp:TextBox ID="TopicDateAfterFilterText" runat="server" />
                    <ajaxToolkit:CalendarExtender ID="TopicDateAfterCalendarExtender" TargetControlID="TopicDateAfterFilterText" PopupPosition="BottomRight" runat="server" />
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow runat="server">
                <asp:TableCell runat="server" HorizontalAlign="Right">
                    By Date (Before):
                </asp:TableCell>
                <asp:TableCell runat="server">
                    <asp:TextBox ID="TopicDateBeforeFilterText" runat="server" />
                    <ajaxToolkit:CalendarExtender ID="TopicDateBeforeCalendarExtender" TargetControlID="TopicDateBeforeFilterText" PopupPosition="BottomRight" runat="server" />
                </asp:TableCell>
            </asp:TableRow>
            <asp:TableRow>
                <asp:TableCell ColumnSpan="2" VerticalAlign="Bottom" HorizontalAlign="Center">
                    <asp:Button runat="server" Text="Apply" CssClass="PopUp_Apply" />
                </asp:TableCell>
            </asp:TableRow>
        </asp:Table>
    </asp:Panel>
</asp:Panel>

我得到的错误只是对象数据源看不到我的自定义控件中的控件(例如,“无法在ControlParameter中找到控件'TopicCategoryFilterList‘”)。显然,这是一件非常简单的事情,但我似乎无论如何也不能简单地弄清楚如何让它工作。我很确定这里肯定已经解决了这个问题,但是我找不到一个例子。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-04-06 00:33:03

这是我自己对这个“问题”的解决方案,以防有人遇到同样的困难,像我一样疯狂地转动他们的轮子,以找到答案。首先,下面是返回自定义控件属性的代码片段。我将以下代码放在ascx.cs文件中:

代码语言:javascript
复制
public partial class PopUp_TopicFilterControl : System.Web.UI.UserControl
{

    public string TopicCategory
    {
        get { return TopicCategoryFilterList.SelectedValue.ToString(); }
    }

}

下面是对ObjectDataSource中的ControlParameter的更改:

代码语言:javascript
复制
<asp:ControlParameter
    DefaultValue=""
    ControlID="TopicFilterSelection"
    PropertyName="TopicCategory"
    Name="category"
    Type="String" />

请注意,我所要做的就是将ControlID更改为我的自定义控件的名称,并添加PropertyName属性,该属性引用我在ascx.cs文件中定义的属性。

非那样做不行。当你看到它的时候很明显,但它让我难倒了好几个小时。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10017948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档