2016-10-11 10 views
0

ユーザが入力した条件に基づいてデータベースレコードのサブセットを取得しています。条件付きフィルタリングが空白で中断する

文字列が空白文字なしの場合は、文字列が含まれているすべてのレコードが正常に検索されます。別の単語やスペースを追加すると、空の結果が返されます。

コントローラ:(Model.Nameと同じ全てのフィールドの実装)ビューの

public IEnumerable<Product> GetProducts(ProductSearchModel searchModel) 
    { 
     var result = db.Products.AsQueryable(); 
     if (searchModel != null) 
     { 
      if (searchModel.Id.HasValue) 
       result = result.Where(x => x.ProductId == searchModel.Id); 
      if (!string.IsNullOrEmpty(searchModel.Name)) 
       result = result.Where(x => x.Name.Contains(searchModel.Name)); 
      if (!string.IsNullOrEmpty(searchModel.Colour)) 
       result = result.Where(x => x.Colour.Contains(searchModel.Colour)); 
      if (!string.IsNullOrEmpty(searchModel.Brand)) 
       result = result.Where(x => x.Brand.Contains(searchModel.Brand)); 
      if (!string.IsNullOrEmpty(searchModel.Genre)) 
       result = result.Where(x => x.Genre.Contains(searchModel.Genre)); 

      if (searchModel.PriceFrom.HasValue) 
       result = result.Where(x => x.Price >= searchModel.PriceFrom); 
      if (searchModel.PriceTo.HasValue) 
       result = result.Where(x => x.Price <= searchModel.PriceTo); 
     } 
     return result.AsEnumerable(); 
    } 

章:

<div class="row"> 
    <i class="fa fa-search"></i> 
    @Html.LabelFor(model => model.Name, htmlAttributes: new { @class = "control-label col-md-2" }) 
    @Html.EditorFor(model => model.Name, new { htmlAttributes = new { @class = "form-control" } }) 
    @Html.ValidationMessageFor(model => model.Name, "", new { @class = "text-danger" }) 
    <span class="glyphicon glyphicon-chevron-down" id="advancedSearchToggle"></span> 
</div> 

... 

<div class="form-group"> 
    <div class="col-md-offset-2 col-md-10"> 
     <input type="submit" value="Save" class="btn btn-default" /> 
    </div> 
</div> 

、誰もが問題になるかもしれないものを知っていますか?

ありがとうございました

+0

検索する文字列の例と、一致させる結果の種類を指定できますか? – juharr

+0

"Water"を検索し、 "Water Green"、 "Water Blue"、 "Water Yellow"を返します。 "Water"を最後に空白で検索すると何も返されません。 "Water Green"を検索すると、何も返されません。 –

+0

検索文字列の空白の種類がDBの空白の種類と同じであることを確認してください。 DBにタブが付いたものがある可能性はありますか? – juharr

答えて

0

空白を試して削除してください。

結果= result.Where(x => x.Name.Replace( ""、 "")。Contains(searchModel.Name));

+1

スペースも 'searchModel.Name'にあります。 – juharr

+1

私もそれらを削除します。結果はresult.Where(x => x.Name.Replace( ""、 ""))に含まれます(searchModel.Name.Replace( ""、 ""))); – gmdev86

+0

searchModel.Name: 'result = result.Where(x => x.Name.Replace(" "、" ").Contains(searchModel.Name.Replace(" "、 "))););' –

関連する問題