В этом тестовом приложении я фильтрую по двум ControlParameters. Как видно из первого кодового блока, оба параметра имеют значение по умолчанию%. Этот код прекрасно работает. Однако во втором блоке кода обратите внимание, что значения по умолчанию исключены. Второй блок кода работает до тех пор, пока текст Textbox не будет пустым. По какой-то причине, когда .NET оценивает выражение фильтра и вставляет "" в выражение, оно, похоже, выдает ошибку и не фильтрует ни один из моих результатов.
Я могу проверить это поведение, установив defaultvalue = "" для каждого ControlParameter.
Очевидно, что я нашел обходной путь, но я хотел бы знать, почему выражение 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>