Представим, что вы вводите 19/04/2000
в строку поиска и ищете человека, который родился в этот день. Возможно, у вашей персоны дата рождения время (например, 19/04/2000 20:30:49 PM
). Тем не менее, ваша строка поиска при преобразовании в тип DateTime будет выглядеть как 19/04/2000 0:00:00 AM
, потому что время не было предоставлено. Операция равенства работает хорошо, эти даты не равны из-за времени.
Итак, если вы хотите искать только по дате, вам нужно сравнить только даты. Ниже я создал быстрый пример ASP. NET Core MVC веб-приложения. Посмотрите на моем примере контроллера, как я конвертирую обе даты в строки с датами только методом ToShortDateString()
.
Пример модели:
public class ExampleModel
{
public string Name { get; set; }
public DateTime Date { get; set; }
}
Пример контроллера:
public class ExampleController : Controller
{
private IList<ExampleModel> _models = new List<ExampleModel>
{
new ExampleModel { Name = "Test1", Date = DateTime.Now },
new ExampleModel { Name = "Test2", Date = DateTime.Now.AddDays(1) },
new ExampleModel { Name = "Test3", Date = DateTime.Now.AddDays(2) },
new ExampleModel { Name = "Test4", Date = DateTime.Now.AddDays(3) }
};
public ActionResult Index(string search)
{
if (!string.IsNullOrEmpty(search))
{
if (DateTime.TryParse(search, out var dateTime))
{
_models = _models.Where(x => x.Date.ToShortDateString() == dateTime.ToShortDateString()).ToList();
}
}
return View(_models);
}
}
Пример Index.cs html:
@model IEnumerable<ExampleModel>
<form asp-action="Index">
<p>
Search: <input type="text" name="search">
<input type="submit" value="Filter" />
</p>
</form>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Name)
</th>
<th>
@Html.DisplayNameFor(model => model.Date)
</th>
<th></th>
</tr>
</thead>
<tbody>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.Name)
</td>
<td>
@Html.DisplayFor(modelItem => item.Date)
</td>
</tr>
}
</tbody>
</table>
Я также рекомендую взглянуть на Getting Started с ASP. NET MVC 5 туториалом.