如果搜索没有从数据库返回值显示空表单

时间:2014-02-28 11:08:52

标签: webmatrix razorengine

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

我在想的是这个

    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>

但是发生的事情是,当我进入页面时,未填充的表单总是出现,我需要用户在进入页面时看到的唯一内容是进行搜索的输入字段。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

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

  1. 正如Selva指出的那样,您错过了表单上的action属性。
  2. 您在selectedData块中创建的IsPost()变量超出范围之后再对其执行任何操作。也许您没有包含所有代码,因此如果它与问题无关,请忽略它。
  3. 回答主要问题:如果您不希望在用户尚未执行搜索时显示空表单,那么您只需要完全删除else块 - 包括空表单 - 来自您的HTML?
  4. 希望有所帮助。

答案 1 :(得分:1)

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

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

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