1

在这个测试应用程序中,我通过两个 ControlParameters 进行过滤。正如您在第一个代码块中看到的,两个参数的默认值都是 %。这段代码很好用。但是,在第二个代码块中,请注意默认值已被删除。只要两个文本框的文本都不是空白的,第二个代码块就可以工作。出于某种原因,当 .NET 评估过滤器表达式并将 "" 插入表达式时,它似乎会出错并且我的结果都不会被过滤。

我可以通过为每个 ControlParameter 设置 defaultvalue="" 来验证此行为。

显然我找到了一种解决方法,但我想知道为什么在提供空字符串时 FilterExpression 会崩溃。

有任何想法吗?

代码块 1:

    <asp:SqlDataSource ID="Customer_Data" runat="server" 
        ConnectionString='<%$ ConnectionStrings:connectionString %>'
        SelectCommand="SELECT Station, StoreFront, CustomerID as CustID FROM vStations" 
        ProviderName="System.Data.SqlClient" 
        FilterExpression="StoreFront LIKE '%{0}%' and CustID LIKE '{1}%'" 
        EnableCaching="True"
        CacheDuration="60">

        <FilterParameters>
            <asp:ControlParameter ControlID="TextBox1" PropertyName="Text" DefaultValue="%" />
            <asp:ControlParameter ControlID="TextBox2" PropertyName="Text" DefaultValue="%" />            
        </FilterParameters>
    </asp:SqlDataSource>

代码块 2:

    <asp:SqlDataSource ID="Customer_Data" runat="server" 
        ConnectionString='<%$ ConnectionStrings:connectionString %>'
        SelectCommand="SELECT Station, StoreFront, CustomerID as CustID FROM vStations" 
        ProviderName="System.Data.SqlClient" 
        FilterExpression="StoreFront LIKE '%{0}%' and CustID LIKE '{1}%'" 
        EnableCaching="True"
        CacheDuration="60">

        <FilterParameters>
            <asp:ControlParameter ControlID="TextBox1" PropertyName="Text"  />
            <asp:ControlParameter ControlID="TextBox2" PropertyName="Text"  />
        </FilterParameters>
    </asp:SqlDataSource>
4

1 回答 1

3

尝试将两者的ConvertEmptyStringToNull属性设置<asp:ControlParameter>为 false。它们是true默认的,我猜这些空值会把东西扔掉。

于 2010-01-19T18:19:10.600 回答