ControlParameter可以';找不到UserControl中的控件
本文关键字:UserControl 控件 找不到 可以 ControlParameter | 更新日期: 2023-09-27 18:29:57
我是ASP.NET的新手,但一直在努力,到目前为止,经过一点研究,我已经克服了所有的障碍。但我遇到了一个似乎无法解决的小问题,涉及到我创建的自定义控件。
该控件是一个通过JQuery弹出的小部件,包含允许用户对结果集进行筛选的控件。我把这个弹出窗口的所有元素都嵌入到了两个特定的页面中,这些页面都运行得很好。我决定创建一个自定义控件,据我所知,我在目标页面上使用了一个带有Control' directive and a
Register指令的ascx文件,并且做得很正确,所以:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="PopUp_TopicFilterControl.ascx.cs" Inherits="POD.PopUp_TopicFilterControl" %>
和
<%@ Register TagPrefix="popup" TagName="TopicFilterControl" Src="~/Controls/PopUp_TopicFilterControl.ascx" %>
"main"页包含一个对象数据源,它需要引用我的自定义控件中的控件以获取其选择参数。数据来源:
<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>
这是自定义控件的主体:
<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="">— All —</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="">— All —</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"category"中找不到控件"TopicCategoryFilterList")。显然这是一件非常简单的事情,但我似乎一辈子都无法简单地想办法让它发挥作用。我很确定这里一定已经解决了这个问题,但我找不到一个例子。
以下是我自己对这个"问题"的解决方案,以防有人遇到同样的困难,像我一样疯狂地旋转车轮,找到答案。首先,这里是用于返回自定义控件的属性的代码片段。我在ascx.cs文件中有这样的代码:
public partial class PopUp_TopicFilterControl : System.Web.UI.UserControl
{
public string TopicCategory
{
get { return TopicCategoryFilterList.SelectedValue.ToString(); }
}
}
这是对ObjectDataSource:中ControlParameter的更改
<asp:ControlParameter
DefaultValue=""
ControlID="TopicFilterSelection"
PropertyName="TopicCategory"
Name="category"
Type="String" />
请注意,我所要做的就是将ControlID更改为自定义控件的名称,并添加PropertyName属性,该属性指的是我在ascx.cs文件中定义的属性。
这就是它的全部。当你看到它的时候很明显,但它让我困惑了好几个小时。