私はかなりASP.NETに慣れていますが、これまでのところすべてのハードルを乗り越えることができました。しかし私は、私が作成したカスタムコントロールを含む、私が周りを回っているように見えることができない少し問題があります。ControlParameterはUserControlにあるコントロールを見つけることができません
コントロールは、JQueryを介してポップアップし、ユーザが結果セットをフィルタリングできるようにするためのコントロールを含む小さなウィジェットです。このポップアップのすべての要素が2つの特定のページに埋め込まれていて、それらのページはそれぞれ正常に動作していました。私は、ターゲットページのControl' directive and a
登録」ディレクティブで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'が見つかりませんでした")。明らかに、非常に単純な問題ですが、私の人生にとっては私はこの仕事をどうやって作るのかを考え出すことはできません。私はここでこれを扱ってきたに違いないと確信していますが、私は例を見つけることができません。
まあ、大丈夫、わかった。明らかに(今私に)明らかに、フォームコントロールがカスタムコントロールの「内部」にあると、フォームコントロールはそのように「可視」にはなりません。それらはカスタムコントロール(duh)のプロパティになります。カスタムコントロールのコードビハインドページでは、データソースコントロールのパラメーターの後にあるコントロールの値を返すパブリックプロパティを作成する必要があります。 ControlParameterを変更して、ControlIDのカスタムコントロールの名前を尋ね、新しいプロパティを参照するPropertyName属性をコードの背後に追加するだけです。とった。 –