C# 多个复选框值
我正在修改别人的代码,遇到了一个似乎无法解决的问题。在数据库中,我们有商店位置和五种销售的产品。如果某个地点销售产品,则数据库值为“X”。如果没有,则数据库值为null。我正在修改的应用程序有一个搜索框,其中包含五种产品的city、zip和now复选框(这是刚刚添加的部分)。理想情况下,您只能输入一个参数,它将根据您输入/选中的内容显示结果,或者您可以输入/选中多个参数。city/zip位工作正常,但结果仅显示销售所有5种产品的位置-它无法识别空值。以下是我的搜索表单提交功能:C# 多个复选框值,c#,javascript,asp.net,tsql,sqldatasource,C#,Javascript,Asp.net,Tsql,Sqldatasource,我正在修改别人的代码,遇到了一个似乎无法解决的问题。在数据库中,我们有商店位置和五种销售的产品。如果某个地点销售产品,则数据库值为“X”。如果没有,则数据库值为null。我正在修改的应用程序有一个搜索框,其中包含五种产品的city、zip和now复选框(这是刚刚添加的部分)。理想情况下,您只能输入一个参数,它将根据您输入/选中的内容显示结果,或者您可以输入/选中多个参数。city/zip位工作正常,但结果仅显示销售所有5种产品的位置-它无法识别空值。以下是我的搜索表单提交功能: <scri
<script type="text/javascript">
$(function() {
$(".form #searchBtn").click(function() {
var searchParameters = "";
if ($(".form #city").val() != "") {
if (searchParameters != "") {
searchParameters += "&";
}
searchParameters += "city=" + $(".form #city").val();
}
if ($(".form #zip").val() != "") {
if (searchParameters != "") {
searchParameters += "&";
}
searchParameters += "zip=" + $(".form #zip").val();
}
if ($(".form #product1").is(':checked')) {
if (searchParameters != "") {
searchParameters += "&";
}
searchParameters += "product1=" + "X";
}
if ($(".form #product2").is(':checked')) {
if (searchParameters != "") {
searchParameters += "&";
}
searchParameters += "product2=" + "X";
}
if ($(".form #product3").is(':checked')) {
if (searchParameters != "") {
searchParameters += "&";
}
searchParameters += "product3=" + "X";
}
if ($(".form #product4").is(':checked')) {
if (searchParameters != "") {
searchParameters += "&";
}
searchParameters += "product4=" + "X";
}
if ($(".form #product5").is(':checked')) {
if (searchParameters != "") {
searchParameters += "&";
}
searchParameters += "product5=" + "X";
}
searchParameters = searchParameters.replace(" ","%20");
$.fn.colorbox({ href: 'locations.aspx?' + searchParameters });
});
});
</script>
$(函数(){
$(“.form#searchBtn”)。单击(函数(){
var参数=”;
如果($(“.form#city”).val()!=”){
如果(searchParameters!=“”){
搜索参数+=“&”;
}
searchParameters+=“city=”+$(“.form#city”).val();
}
if($(“.form#zip”).val()!=”){
如果(searchParameters!=“”){
搜索参数+=“&”;
}
searchParameters++=“zip=”+$(“.form#zip”).val();
}
如果($(“.form#product1”).is(“:checked”)){
如果(searchParameters!=“”){
搜索参数+=“&”;
}
searchParameters+=“product1=”+“X”;
}
如果($(“.form#product2”).is(“:checked”)){
如果(searchParameters!=“”){
搜索参数+=“&”;
}
searchParameters+=“product2=”+“X”;
}
如果($(“.form#product3”).is(“:checked”)){
如果(searchParameters!=“”){
搜索参数+=“&”;
}
searchParameters+=“product3=”+“X”;
}
如果($(“.form#product4”).is(“:checked”)){
如果(searchParameters!=“”){
搜索参数+=“&”;
}
searchParameters+=“product4=”+“X”;
}
如果($(“.form#product5”).is(“:checked”)){
如果(searchParameters!=“”){
搜索参数+=“&”;
}
searchParameters+=“product5=”+“X”;
}
searchParameters=searchParameters.replace(“,“%20”);
$.fn.colorbox({href:'locations.aspx?'+searchParameters});
});
});
这段代码正在生成一个带有搜索参数locations.aspx?city=blah&otherparamsher的URL。任何想法都将不胜感激
编辑
为了回答您的问题,代码都在前端。以下是locations.aspx的查询结果
<asp:SqlDataSource ID="locations" runat="server"
SelectCommand="SELECT * FROM [locations] WHERE (([city] LIKE '%' + @city + '%') AND ([zip] LIKE '%' + @zip + '%') AND ([product1] LIKE '%' + @product1 + '%') AND ([product2] LIKE '%' + @product2 + '%') AND ([product3] LIKE '%' + @product3 + '%') AND ([product4] LIKE '%' + @product4 + '%') AND ([product5] LIKE '%' + @product5 + '%')) ORDER BY [retailer_name]">
<SelectParameters>
<asp:QueryStringParameter DefaultValue="%" Name="city"
QueryStringField="city" Type="String" />
<asp:QueryStringParameter DefaultValue="%" Name="zip"
QueryStringField="zip" Type="String" />
<asp:QueryStringParameter DefaultValue="%" Name="product1"
QueryStringField="product1" Type="String" />
<asp:QueryStringParameter DefaultValue="%" Name="product2"
QueryStringField="product2" Type="String" />
<asp:QueryStringParameter DefaultValue="%" Name="product3"
QueryStringField="product3" Type="String" />
<asp:QueryStringParameter DefaultValue="%" Name="product4"
QueryStringField="product4" Type="String" />
<asp:QueryStringParameter DefaultValue="%" Name="product5"
QueryStringField="product5" Type="String" />
</SelectParameters>
</asp:SqlDataSource>
编辑
再次修改以包括形式
<input type="text" id="city" size="20" />
<input type="text" id="zip" maxlength="5" size="5" />
<input type="checkbox" id="product1" value="" />
<input type="checkbox" id="product2" value="" />
<input type="checkbox" id="product3" value="" />
<input type="checkbox" id="product4" value="" />
<input type="checkbox" id="product5" value="" />
<input type="button" value="Search" id="searchBtn"/>
在select语句where子句中,您应该在产品之间使用OR,我认为您可以跳过一些括号。您只需要在OR:s周围加上括号,而不需要在AND:s周围加上括号。试试这个
SELECT * FROM [locations]
WHERE [city] LIKE '%' + @city + '%' AND
[zip] LIKE '%' + @zip + '%' AND
( [product1] LIKE '%' + @product1 + '%' OR
[product2] LIKE '%' + @product2 + '%' OR
[product3] LIKE '%' + @product3 + '%' OR
[product4] LIKE '%' + @product4 + '%' OR
[product5] LIKE '%' + @product5 + '%'
)
ORDER BY [retailer_name]
我也会尝试一下同样的比较。试试这个:
SELECT * FROM [locations]
WHERE ([city] = @city OR @city = '%') AND
([zip] = @zip OR @zip = '%') AND
(
[product1] = @product1 OR @product1 = '%' OR
[product2] = @product2 OR @product2 = '%' OR
[product3] = @product3 OR @product3 = '%' OR
[product4] = @product4 OR @product4 = '%' OR
[product5] = @product5 OR @product5 = '%'
)
ORDER BY [retailer_name]
你非常接近!因为你,我才得以一直戳它直到我把它弄对。下面是我的最后一条SQL语句,它按照我的预期执行:
SELECT * FROM [locations]
WHERE ([city] = @city OR @city = '%')
AND ([zip] = @zip OR @zip = '%')
AND
(
([product1] = @product1 OR @product1 = '%')
AND ([product2] = @product2 OR @product2 = '%')
AND ([product3] = @product3 OR @product3 = '%')
AND ([product4] = @product4 OR @product4 = '%')
AND ([product5] = @product5 OR @product5 = '%'
))
ORDER BY [retailer_name]
问题可能出在locations.aspx.cs中的后端代码中。你能在后面附加一些包含搜索方法的代码吗?请参见上文…如果我还可以告诉你一些事情,请告诉我。请参见下文我关于新Sql语句的建议。这更好,但仍然不起作用。它现在所做的是尊重您为city或zip输入的内容,并返回与之匹配的任何内容,但不考虑是否选中了产品框。如果您选中一个,并且没有输入城市或邮政编码,它将返回整个数据库。您必须使用类似的比较吗?尝试将其改为=(相等比较)。为了澄清这一点,如果您输入邮政编码并检查某个产品,它将返回该邮政编码内的所有位置,而不管该产品是否已售出。这就像它完全忽略了产品一样。使用=而不是like会使每个查询都不返回结果。好的,请尝试我最后一次尝试更正where子句。我认为您应该能够避免LIKE比较,而是使用=(equal)。