このテスト アプリケーションでは、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>