Лучший возможный способ обработки исключения String не был распознан как допустимый DateTime - PullRequest
0 голосов
/ 06 мая 2018

Мой проект имеет интерфейс, через который пользователь может вводить диапазон дат, и будут отображаться записи между этими датами. Это мой взгляд Модель с двумя строками.

public class SearchByDate
    {
        public string Date1 { get; set; }
        public string Date2 { get; set;  }
    }

Это представление для этого представления. Модель

  @using (Html.BeginForm())
  {
    <div class="form-group col-sm-6">
      <label>From</label>
      @Html.EditorFor(model => model.Date1, new { htmlAttributes = new { @class = "form-control datepicker", required = "required", placeholder = "From" } })
      <div class="help-block with-errors"></div>
    </div>
    <div class="form-group col-sm-6">
       <label>To</label>
        @Html.EditorFor(model => model.Date2, new { htmlAttributes = new { @class = "form-control datepicker", required = "required", placeholder = "To" } })
        <div class="help-block with-errors"></div>
         </div>
        <div class="col-sm-12">
        <input style="float: right ; background-color:white; color:#e60053 " type="Submit" class="btn" value="Generate Report" onmouseover=" this.style.backgroundColor = '#e60053', this.style.color = 'white' " onmouseout="    this.style.backgroundColor = 'white',   this.style.color = '#e60053'">
    </div>
  }

Jquery для тех @ HTML.EditorFor

@section scripts{

<script src="~/scripts/jquery-ui-1.12.1.js"></script>
<script>
    $(function () {
        $(".datepicker").datepicker({
            dateFormat: "yy-mm-dd",
            changeMonth: true,
            changeYear: true,
            yearRange: "1950:2019",
            //minDate: new Date(2018, 0, 1),
            maxDate: new Date(2019, 0, 1),
            showOn: "both",
            buttonText: "Select"
        });
    });
</script>

}

Итак, я взял данные, и по этим двум полям ввода я выполняю запрос к моему коду

 var result = (from entity in Dbset.ToList()
                      where DateTime.Parse(entity.Date) >= DateTime.Parse(@from) &&
                      DateTime.Parse(entity.Date) <= DateTime.Parse(to)
                      select entity);

Это работает отлично, но если я даю недопустимую дату, например, если я передал "2018" или "12" или что-то еще, что не является допустимой датой, он выдает исключение по запросу " Строка не была распознана как действительный DateTime.". Каков наилучший способ справиться с этим?

1 Ответ

0 голосов
/ 07 мая 2018
public class Program
{
    public static void Main()
    {
        var list = new List<String>{"2018-01-01","2018-13-13","2020-06-06", "2021-06-06"};

        var today = DateTime.Today;

        DateTime parseDate;

        // Determine valid dates
        var validDates = (from stringDate in list
                          where DateTime.TryParse(stringDate, out parseDate) ? parseDate >= today : false
                          select DateTime.Parse(stringDate));

        Console.WriteLine(okDates.Count()); // 2 valid dates

        // Determine invalid dates
        var invalidDates = (from stringDate in list
                            where !DateTime.TryParse(stringDate, out parseDate)
                            select stringDate);

        Console.WriteLine(invalidDates.Count()); // 1 invalid date


    }
}
...