JQuery DateTime Picker и ASP.NET MVC - PullRequest
4 голосов
/ 27 августа 2009

В настоящее время я использую средство выбора даты и времени jQuery, чтобы выбрать дату, которую нужно поместить в базу данных. При использовании выбора даты и времени результат правильно отображается в текстовом поле, к которому он привязан (IE 27/09/2009 16:00). Однако время даты не передается в приложение MVC должным образом и принимается как 01/01/0001 00: 00: 01.

Для этого метода требуется один параметр - Match m. Страница строго напечатана как совпадение.

<p>
    <label for="TimeAndDate">Time and date (click to reveal date and time picker):</label>
    <br />
    <%= Html.TextBox("TimeAndDate") %>
    <%= Html.ValidationMessage("TimeAndDate", "*") %>   
</p>

<script type="text/javascript">
    $(function() {
        $('#TimeAndDate').datepicker({
            duration: '',
            showTime: true,
            constrainInput: false
         });
    });
</script>

Ради длины я опустил сценарий, включенный выше, но они присутствуют на странице. Текстовое поле и поля сообщения проверки были созданы Visual Studio.

У меня есть ощущение, что мне нужно каким-то образом неявно преобразовать строку в текстовом поле в объект DateTime перед передачей его методу, но я не знаю как.

Любая помощь по этому вопросу будет высоко ценится

Спасибо, Andy

Ответы [ 5 ]

6 голосов
/ 27 августа 2009

Обычно это происходит, когда входной параметр для действия контроллера на самом деле не является объектом DateTime.

Дважды проверьте, что имя вашего входного параметра для действия контроллера - "TimeAndDate", а тип - String.

Затем можно использовать DateTime.Parse (String) для разбора строки в тип DateTime.

0 голосов
/ 22 декабря 2012

Как указал Энди, я подозреваю, что это из-за формата даты по умолчанию, который использует jQuery. С вашим примером кода на моем ПК я получаю 22.12.2012 (текущая дата в формате США) и я в Австралии. Вы можете изменить формат даты, используемый jQuery, используя dateFormat:

<script type="text/javascript">
    $(function() {
        $('#TimeAndDate').datepicker({
            duration: '',
            showTime: true,
            constrainInput: false,
            dateFormat: "dd M yy"
         });
    });
</script>
  • jQuery: дд Мгг = дд МММ гггг (c #)
  • jQuery ддММ ггг = дд мммм гггг (с #)

Также вы можете захотеть увидеть здесь: MVC DateTime привязка с неправильным форматом даты

0 голосов
/ 09 декабря 2011

Попробуйте это

[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MatchesAdd(FormCollection collection)
{
    dateTime date = DateTime.Parse(collection["TimeAndDate"].ToString())

return view();
}

Это даст вам дату.

0 голосов
/ 27 августа 2009

Что произойдет, если вы попробуете это вместо:

[ValidateInput(false)]
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult MatchesAdd(FormCollection values)
{
    Match m = new Match();

    try
    {
        UpdateModel<Match>(m);

        // If your date still has not been picked up you could
        // just uncomment this next line:
        // m.TimeAndDate = DateTime.Parse(values["TimeAndDate"]);

        DM.AddMatch(m);

        return RedirectToAction("Matches/List/Upcoming");
    }
    catch(Exception ex)
    {
        return Content(m.TimeAndDate.ToString());
    }
}
0 голосов
/ 27 августа 2009

Вот действие контроллера, которое получает данные со страницы:

    [ValidateInput(false)]
    [AcceptVerbs(HttpVerbs.Post)]
    public ActionResult MatchesAdd(Match m)
    {
        try
        {
            m.Against = Server.HtmlEncode(m.Against);
            m.Info = Server.HtmlEncode(m.Info);
            m.MatchID = Guid.NewGuid();

            m.Played = false;
            m.OurScore = 0;
            m.EnemyScore = 0;

            DM.AddMatch(m);

            return RedirectToAction("Matches/List/Upcoming");
        }
        catch(Exception ex)
        {
            return Content(m.TimeAndDate.ToString());
        }
    }

Блок catch предназначен только для отладки.

Как вы можете видеть, я не выполнял синтаксический анализ объекта DateTime, однако поставил точку останова в начале действия, а дата и время неверны с самого начала. Конечно, я не могу получить правильную дату от этого?

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