1

このテスト アプリケーションでは、2 つの ControlParameters でフィルタリングしています。最初のコードブロックでわかるように、両方のパラメーターのデフォルト値は % です。このコードはうまく機能します。ただし、2 番目のコード ブロックでは、既定値が削除されていることに注意してください。2 番目のコード ブロックは、どちらのテキスト ボックスのテキストも空白でない限り機能します。何らかの理由で、.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

ConvertEmptyStringToNull2 つの のプロパティ<asp:ControlParameter>を falseに設定してみてください。それらはtrueデフォルトであり、ヌルが物事を投げ出していると思います。

于 2010-01-19T18:19:10.600 に答える