3

我正在尝试修复工作搜索工具。这是我第一次遇到 ASP.NET。当前的搜索工具有一个单选按钮列表,其中包含如何搜索我们的本地目录的三个选项。然而,在我之前从事这个项目的人没有完成代码并且已经退出。单选按钮不影响搜索查询,因为我注意到无论您选择什么选项,查询都是相同的。

这是我尝试重写搜索功能以合并三个单选按钮选项。但是,当我将此功能合并到其余代码中时,页面根本不会呈现,并且我没有收到错误消息。我认为我在查询字符串中没有出错,因为我采用了原始字符串并通过省略包含语句对其进行了变体。我假设错误来自我的 if 语句或我试图比较 asp.net RadioButtonList ListItem 值的方式。

protected void btnclick_WorkspaceSearch(object sender, EventArgs e){
    string strSearchTerm=tbSearch.Text.Trim() 

    if (rblSearchOption.SelectedValue == "all"){
        // Find the search term in either a file name or file content
        string indexQuery = "SELECT docauthor,doctitle, FileName, Path, Write, Size, Rank";
        indexQuery += "FROM " + "Workspace" + "..SCOPE() WHERE ";
        indexQuery += "CONTAINS(FileName, '\"" + strSearchTerm + "\"') ";
        indexQuery += "OR CONTAINS(Contents, '\"" + strSearchTerm + "\"') ";
        indexQuery += "ORDER BY Rank DESC";
    }
    if (rblSearchOption.SelectedValue=="names"){
        // Find the search term in a file name 
        string indexQuery = "SELECT docauthor,doctitle, FileName, Path, Write, Size, Rank";
        indexQuery += "FROM " + "Workspace" + "..SCOPE() WHERE ";
        indexQuery += "CONTAINS(FileName, '\"" + strSearchTerm + "\"') ";
        indexQuery += "ORDER BY Rank DESC";
    }
    if (rblSearchOption.SelectedValue =="contents") {
        // Find the search term in a file's content
        string indexQuery = "SELECT docauthor,doctitle, FileName, Path, Write, Size, Rank";
        indexQuery += "FROM " + "Workspace" + "..SCOPE() WHERE ";
        indexQuery += "CONTAINS(FileName, '\"" + strSearchTerm + "\"') ";
        indexQuery += "ORDER BY Rank DESC";
    }
    searchIndex(indexQuery);
    lit_strQueryString.Text = indexQuery;
}
4

2 回答 2

0

我解决了这个问题。对于那些评论感谢您的意见的人,我确实做了一些必要的更改以帮助纠正潜在的错误。至于比较 listItem 值的原始问题,我使用的行是:

if (rblSearchOption.SelectedItem.Value =="contents"){
//logic here
}

我以前试过这个,但没有用。我假设是因为评论中指出的错误。

附加说明(基于评论):上面的代码缺少 ; 在第 1 行

字符串索引查询应在 if 语句之外声明和启动。

再次感谢那些试图帮助我的人。

于 2012-12-27T19:06:36.653 回答
0

很高兴你发现你的问题,有点不相关,但看看你的代码,我会说它需要一些认真的重构。这段代码可以简化为:

1)使用switch语句。这将有助于评估单选按钮列表的选定值一次,这与您的代码不同

2) 使用StringBuilder构造查询

3) 删除重复 -名称内容的附加逻辑完全相同,您可以通过使用两个 case 表达式并提供一个执行语句来删除重复。

  System.Text.StringBuilder indexQuery = new System.Text.StringBuilder();
  indexQuery.Append("SELECT docauthor,doctitle, FileName, Path, Write, Size, Rank FROM Workspace..SCOPE() WHERE ");

    switch(rblSearchOption.SelectedItem.Value)
    {
        case "all":
        indexQuery.AppendFormat("CONTAINS(FileName,'{0}') ",strSearchTerm);
        indexQuery.AppendFormat("OR CONTAINS(Contents,'{0}')",strSearchTerm);
        indexQuery.AppendLine("ORDER BY Rank DESC");
            break;
        case "names":
        case "contents":
        indexQuery.AppendFormat("CONTAINS(FileName,'{0}')",strSearchTerm);
        indexQuery.Append("ORDER BY Rank DESC");
            break;
    }

    searchIndex(indexQuery.ToString());
    lit_strQueryString.Text = indexQuery;
于 2012-12-28T05:51:57.890 回答