如果搜索不从数据库返回值,则显示空表单



所以我得到了一个带有搜索表单的页面,当用户搜索一个值时,如果数据库中没有记录,表单返回空,但如果有记录,表单将填充数据。

我在想的是这个

    var db = Database.Open("myDataBase");
    var selectCommand = "SELECT * FROM exportClient";
    var searchTerm = "";
    if(!Request.QueryString["searchField"].IsEmpty() ) {
    selectCommand = "SELECT * FROM exportClient WHERE clientAccount = @0";
    searchTerm = Request.QueryString["searchField"];
    }
    if(IsPost){
     var selectedData = db.Query(selectCommand, searchTerm);
    }

然后:

<body>
  <div class="col_12">
    <form method="get">
        <label>search</label><input type="text" class="col_3" name="searchField" />
        <button type="submit" class="button red" value="search">search</button>
    </form>
</div>

    @if(!Request.QueryString["searchField"].IsEmpty() ){
            foreach(var row in db.Query(selectCommand, searchTerm)) {
              <div class="col_12 box">
                 <form method="post">
                       // HERE IS THE FORM POPULATED
                  </form>
              </div>
             }
    } else { 
              <div class="col_12 box">
                 <form method="post">
                       // HERE IS THE FORM NOT POPULATED
                  </form>
              </div>
      }
</body>
但是正在发生的事情是,当我进入页面时,

未填充的表单总是显示,我需要用户在进入页面时看到的唯一内容是进行搜索的输入字段。

我做错了什么?

我不确定是否理解了您的目标,但在我看来,您的主要问题是检测查询字符串是否存在。

我认为你的代码应该是这样的

@if(Request.QueryString.HasKeys())
{
  if(!Request.QueryString["searchField"].IsEmpty() ){
    <p>searchField has value</p>
  } else {
    <p>searchField hasn't value</p>
  }
}

我可以看到您的代码存在许多潜在问题,希望您可以将这些问题放在一起以实现您想要的:

  1. 正如Selva指出的那样,表单上缺少action属性。
  2. 您在 IsPost() 块中创建的 selectedData 变量在对它执行任何操作之前会超出范围。也许你没有包含所有代码,所以如果它与问题无关,请忽略它。
  3. 回答主要问题:如果您不希望在用户尚未执行搜索时出现空表单,那么您当然只需要从 HTML 中完全删除else块(包括空表单)吗?

希望有帮助。

最新更新