我在这个网站上工作,我想从列表中搜索特定酒店的日期 这是我尝试过的事情
在我的控制器上
public ActionResult Index(string searchString)
{
IEnumerable<HotelAvailability> hotels = db.HotelAvailabilities.Include(c => c.Hotel);
if (!String.IsNullOrEmpty(searchString))
{
hotels = db.HotelAvailabilities.Include(c => c.Hotel).Where(
s => s.RoomType.Contains(searchString)
|| s.AvailabilityDate.Equals(searchString)
|| s.Hotel.HotelName.Contains(searchString));
return View(hotels);
}
}
和我的观点
<div class="box-tools pull-right">
@using (Html.BeginForm("Index", "HotelAvailabilities", FormMethod.Get))
{
<div class="input-group" style="width: 150px;">
<input type="text" name="searchString" class="form-control input-sm pull-right" placeholder="Search">
<div class="input-group-btn">
<button class="btn btn-sm btn-success"><i class="fa fa-search"></i></button>
</div>
</div>
}
</div>
答案 0 :(得分:0)
关于如何搜索日期的问题:将搜索字符串转换为DateTime
。
if (!String.IsNullOrEmpty(searchString)) {
DateTime searchDate;
if (DateTime.TryParse(searchString, out searchDate)) {
hotels = db.HotelAvailabilities.Include(c => c.Hotel)
.Where(h => h.AvailabilityDate == searchDate);
// do not use .Equals() which can not be converted to SQL
}
return View(hotels);
}
更清晰的解决方案是提供一个额外的控件(返回DateTime的日期选择器),让用户选择搜索日期并处理搜索字词。
关于您在代码示例中显示的搜索:
如果您希望将所有内容都包含在一个搜索字符串中,则必须将其拆分为单独的标记,以用于您显示的查询。
例如,如果用户输入“Hilton 2016-09-01”,您希望将其拆分为“Hilton”和“2016-09-01”,然后使用这些令牌进行搜索。我想这将是另一个问题。