Как искать по дате в. NET Core Razor страниц? - PullRequest
0 голосов
/ 17 апреля 2020

Сначала я попытался с помощью обычного метода сортировки и фильтрации выполнить поиск по дате, но он не работал с типом данных datetime и работает только со строковым типом данных. Было бы здорово, если бы кто-нибудь помог мне понять, как это сделать. Кроме того, я хочу, чтобы то же решение использовалось для. NET MVC 5. Для этого я попытался Поиск даты по детали asp. Net mvc 5 , но для по какой-то причине, это не работает для меня.

Заранее спасибо.

Вот код:

        //Search by BirthDate
        if (searchStringbyBirthDate != null)
        {
            pageIndex = 1;
        }
        else
        {
            searchStringbyBirthDate = currentFilterBirthDate;
        }
        CurrentFilterBirthDate = searchStringbyBirthDate;

        //Filtering by BirthDate:not working
        if (!string.IsNullOrEmpty(searchStringbyBirthDate))
        {
         personData=personData.Where(b=>b.BirthDate.Equals(searchStringbyBirthDate));
        }

У меня здесь строка, и я знаю, что это неправильно, но я не уверен, как дать дата и время здесь.

1 Ответ

0 голосов
/ 17 апреля 2020

Представим, что вы вводите 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 туториалом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...