在这个测试应用程序中,我正在通过两个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>
答案 0 :(得分:3)
尝试将两个ConvertEmptyStringToNull
的{{1}}属性设置为false。默认情况下它们是<asp:ControlParameter>
,而我猜测空值会丢掉它们。