在这个测试应用程序中,我通过两个 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>