【问题标题】:ObjectDataSource can not find control parameter sometimesObjectDataSource 有时找不到控制参数
【发布时间】:2014-11-05 02:03:40
【问题描述】:

我有一个用 ObjectDataSource 填充的表单视图,它工作得很好。嵌套在其中的是一个网格视图,它也填充了一个嵌套 ODS,它在 99% 的时间里都能完美运行。同样嵌套在 formview 中的是另一个 ODS,该 ODS 从填充其他嵌套数据源的同一控件中填充,该控件始终完美运行。下面的代码使这个有意义。

问题是,如果您更改页面,大部分时间都可以正常工作。该页面内置了 2 个搜索功能。那就是发生错误的地方。如果您在不更改页面的情况下使用它们中的任何一个,则效果很好。如果您使用其中之一,然后更改页面并尝试使用其中任何一个,页面将崩溃并出现错误,提示在“Y”中找不到控制参数“X”。问题是这不是一个真正的错误,因为有一个按钮显示引导模型,该模型显示其网格视图没有问题,并且 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 字段中使用了文本框、隐藏控件和 Session 变量,但没有任何区别。如果我禁用 ODS2,它也会恢复正常工作,但我需要这些数据。

谢谢

吉米

【问题讨论】:

    标签: c# asp.net gridview objectdatasource formview


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多