repeater.findcontrol无法在内容页

时间:2017-08-30 23:58:25

标签: asp.net vb.net findcontrol asprepeater content-pages

我有一个非内容(没有主页)页面,其中包含一个按照我的意愿执行的转发器,但是当我将相同的代码移动到内容页面(使用master)时,RepeaterItems循环中的findControl不再有效

ASPX:

<ItemTemplate>
            <div class="row" id="qrow" runat="server" data-id='<%#Eval("callQuestionID") %>' data-type='<%#Eval("callQuestionResponseType") %>' data-parent='<%#Eval("callQuestionParent") %>'>
                <div class="col-md-4">
                    <asp:Label ID="questonTextLabel" runat="server" Text='<%# Eval("callQuestionText") %>'></asp:Label>
                </div>
                <div class="col-md-4">
                    <asp:Panel ID="Panel1" runat="server"></asp:Panel>
                </div>
            </div>
        </ItemTemplate>

ItemDataBound exerp

Dim newRBY As New RadioButton
                newRBY.InputAttributes.Add("data-id", CType(e.Item.DataItem, DataRowView)("callQuestionID"))
                newRBY.InputAttributes.Add("data-idy", CType(e.Item.DataItem, DataRowView)("callQuestionID"))
                newRBY.ID = "rby"
                newRBY.Text = "Yes"
                newRBY.GroupName = "qid" & CType(e.Item.DataItem, DataRowView)("callQuestionID")
                CType(e.Item.FindControl("Panel1"), Panel).Controls.Add(newRBY)
                Dim newRBN As New RadioButton
                newRBN.InputAttributes.Add("data-id", CType(e.Item.DataItem, DataRowView)("callQuestionID"))
                newRBN.InputAttributes.Add("data-idn", CType(e.Item.DataItem, DataRowView)("callQuestionID"))
                newRBN.ID = "rbn"
                newRBN.Text = "No"
                newRBN.GroupName = "qid" & CType(e.Item.DataItem, DataRowView)("callQuestionID")
                CType(e.Item.FindControl("Panel1"), Panel).Controls.Add(newRBN)

发布用户互动处理:

For Each questionRow As RepeaterItem In questionRepeater.Items
    ...
    Dim rby As RadioButton = CType(questionRow.FindControl("rby"), RadioButton) ****** Fails Here *****
                If rby.Checked Then
                    dataAccess.callQuestionAnswerTable_Insert(callIDInteger, CInt(rby.InputAttributes("data-id")), "true")
                ElseIf CType(questionRow.FindControl("rbn"), RadioButton).Checked Then
                    dataAccess.callQuestionAnswerTable_Insert(callIDInteger, CInt(rby.InputAttributes("data-id")), "false")
                End If

尝试查找'rby'时,后用户交互处理失败。生成的HTML的唯一区别是在内容页面中控件ID获得MainContent_前缀。

我该怎么做才能解决这个问题?

2 个答案:

答案 0 :(得分:0)

如果代码位于子页面上,而Repeater位于Master Page本身,则需要使用FindControl指定Master页面并在那里找到Repeater。

Dim rpt As Repeater = CType(Master.FindControl("Repeater1"),Repeater)

然后

For Each questionRow As RepeaterItem In rpt.Items

(使用代码转换器从C#翻译成VB,所以它可能稍微偏离,在C#中它是Repeater rpt = Master.FindControl("Repeater1") as Repeater;

答案 1 :(得分:0)

我发现了我的问题。实际上,我在转发器中绑定了

If Not IsPostBack Then
阻止,我不应该有。