ユーザが入力した条件に基づいてデータベースレコードのサブセットを取得しています。条件付きフィルタリングが空白で中断する
文字列が空白文字なしの場合は、文字列が含まれているすべてのレコードが正常に検索されます。別の単語やスペースを追加すると、空の結果が返されます。
コントローラ:(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>
、誰もが問題になるかもしれないものを知っていますか?
ありがとうございました
検索する文字列の例と、一致させる結果の種類を指定できますか? – juharr
"Water"を検索し、 "Water Green"、 "Water Blue"、 "Water Yellow"を返します。 "Water"を最後に空白で検索すると何も返されません。 "Water Green"を検索すると、何も返されません。 –
検索文字列の空白の種類がDBの空白の種類と同じであることを確認してください。 DBにタブが付いたものがある可能性はありますか? – juharr