ObjectDataSource有时无法找到控制参数

时间:2014-11-05 02:03:40

标签: c# asp.net gridview objectdatasource formview

我有一个用ObjectDataSource填充的formview,它运行得很好。嵌套在一个gridview中也填充了嵌套的ODS,它在99%的时间内都能完美运行。嵌套在formview中的另一个ODS是从同一个控件填充的,它填充了其他嵌套的数据源,这些数据源在所有时间都是完美的。下面的代码使其有意义。

问题是如果你改变页面,它在大多数情况下都可以正常工作。页面内置了2个搜索功能。这就是错误发生的地方。如果您使用其中任何一个而不更改页面,它的效果很好如果您使用其中一个然后更改页面并尝试使用其中任何一个页面崩溃,则会出现类似控件参数' X'在' Y'中找不到。问题是它不是一个真正的错误,因为有一个按钮显示引导模型,显示其gridview没有问题,ODS基于完全相同的控件,所以它显然在那里。我想这与事件有关,但它们一步一步就好了。我不确定是什么原因造成的。

这是一个小小的测试项目,基本上是相同的设置,只有在formview中设置分页和真实项目中的ODS1,它才能完美运行。

<asp:FormView ID="FormView1" runat="server" DataSourceID="ObjectDataSource1">
    <ItemTemplate>
        ImportantID:
        <asp:Label Text='<%# Bind("ImportantID") %>' runat="server" ID="ImportantIDLabel" Visible="false" /><br />
        Name:
        <asp:Label Text='<%# Bind("Name") %>' runat="server" ID="NameLabel" /><br />
        <div id="nestedContent">
            <asp:ObjectDataSource ID="ObjectDataSource2" runat="server" SelectMethod="listNested" TypeName="TestProject.DataSourceClass">
                <SelectParameters>
                    <asp:ControlParameter ControlID="ImportantIDLabel" PropertyName="Text" DefaultValue="-1" Name="ImportantIDFromOnject1ForNestedObject" Type="Int32"></asp:ControlParameter>
                </SelectParameters>
            </asp:ObjectDataSource>
            <asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource2" AutoGenerateColumns="False">
                <Columns>
                    <asp:BoundField DataField="YetAnotherProperty" HeaderText="YetAnotherProperty" SortExpression="YetAnotherProperty"></asp:BoundField>
                    <asp:BoundField DataField="OtherPropertiesGoInThisClass" HeaderText="OtherPropertiesGoInThisClass" SortExpression="OtherPropertiesGoInThisClass"></asp:BoundField>
                </Columns>
            </asp:GridView>
        </div>
        SomeProperty:
        <asp:Label Text='<%# Bind("SomeProperty") %>' runat="server" ID="SomePropertyLabel" /><br />
        SomeOtherProperty:
        <asp:Label Text='<%# Bind("SomeOtherProperty") %>' runat="server" ID="SomeOtherPropertyLabel" /><br />
        <asp:ObjectDataSource ID="ObjectDataSource3" runat="server" SelectMethod="GetDataObject2" TypeName="TestProject.DataSourceClass">
            <SelectParameters>
                <asp:ControlParameter ControlID="ImportantIDLabel" PropertyName="Text" DefaultValue="-1" Name="ImportantID" Type="Int32"></asp:ControlParameter>
            </SelectParameters>
        </asp:ObjectDataSource>
        <div id="BootStrapModalPopup">
            This displays the data with no problems
        </div>
    </ItemTemplate>
</asp:FormView>
<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" SelectMethod="GetDataObject1" TypeName="TestProject.DataSourceClass">
    <SelectParameters>
        <asp:Parameter DefaultValue="-1" Name="ImportantID" Type="Int32"></asp:Parameter>
        <asp:Parameter DefaultValue="" Name="Name" Type="String"></asp:Parameter>
        <asp:Parameter Name="SomeProperty" Type="String"></asp:Parameter>
    </SelectParameters>
</asp:ObjectDataSource>

我很欣赏任何关于下一步的想法。顺便说一下,我为ID字段使用了一个文本框,hiddencontrol和Session变量,没有什么能对它产生影响。如果我禁用ODS2,它也会恢复正常工作,但我需要这些数据。

由于

1 个答案:

答案 0 :(得分:0)

我实际上幸运地得到了答案。这不是我的嵌套它是我的分页。我会给那些有类似问题的人留下这个问题,因为我没有看到任何成功的错误。我遇到的问题是我需要在搜索时重置我的pageindex。它从第一页开始进行了很好的搜索,但是由于索引而从任何其他页面搜索是空的返回,因此控件不存在。希望如果您遇到此问题,它将帮助某人搜索。只需将formview上的pageindex设置为0.