【发布时间】:2012-02-09 14:58:12
【问题描述】:
我有一个包含以下选项的下拉列表:
<asp:DropDownList ID="ddlTaxStatus" runat="server" OnPreRender="ddlContainerStatus_PreRender">
<asp:ListItem Text="--Select--" Value="-1"></asp:ListItem>
<asp:ListItem Value="" Text="'' - Not closed"></asp:ListItem>
<asp:ListItem Value="R" Text="R - Ready to pay"></asp:ListItem>
<asp:ListItem Value="X" Text="X - Paid"></asp:ListItem>
<asp:ListItem Value="C" Text="C - Cancel"></asp:ListItem>
<asp:ListItem Value="O" Text="O - Original"></asp:ListItem>
<asp:ListItem Value="D" Text="D - Delete"></asp:ListItem>
</asp:DropDownList>
根据用户选择的选项,我将所选选项发送到我的数据库中进行搜索,并检索相关字段中具有所选值的记录。我的 Sql usp 是这样的:
ALTER PROCEDURE [dbo].[uspGetContainerSummaryRecordsForSearch] (
@fkJobID varchar(8),
@csmTaxStatus varchar(3)
)
AS
BEGIN
SET TRANSACTION ISOLATION LEVEL SNAPSHOT
SET NOCOUNT ON;
SELECT fkJobID,
csmContainerID,
csmDisplayContainerID,
csmTaxStatus
FROM ContainerSummaryRecord
where fkJobID = @fkJobID
AND ( @csmTaxStatus IS NULL
OR csmTaxStatus = @csmTaxStatus )
END
现在我的问题是,当用户选择带有 Value="" 和 Text="'' - Not closed" 的选项时,我没有得到想要的结果。这是因为 value="" 实际上在 DB 中存储为 null。 在查询中,我正在比较 where 子句中的输入参数,例如 @csmTaxStatus IS NULL 因为如果用户没有选择任何表示 Text="--Select--" Value="-1" 的选项,则不会应用过滤器并返回所有结果(这是此选项所需的行为)。但这与在 DB 中存储为 null 的 Value="" 冲突。请帮忙。
【问题讨论】:
-
为什么不选择未关闭的代码?称它为 Z.. & 它不会存储为 null