Подтвердить что ты не робот

Textboxfor mvc3 форматирование даты и проверка даты

Я решил начать работу с MVC 3, и я столкнулся с этой проблемой, пытаясь переделать одно из своих веб-приложений в MVC3.

У меня есть настройки проектов таким образом:

public class Project
{
    public int      ProjectID       { get; set; }

    [Required(ErrorMessage="A name is required")]
    public string   Name            { get; set; }

    [DisplayName("Team")]
    [Required(ErrorMessage="A team is required")]
    public int      TeamId          { get; set; }

    [DisplayName("Start Date")]
    [Required(ErrorMessage="A Start Date is required")]
    [DisplayFormat(ApplyFormatInEditMode=true, DataFormatString="{0:d}")]
    public DateTime StartDate       { get; set; }

    [DisplayName("End Date")]
    [Required(ErrorMessage="An End Date is required")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
    public DateTime EndDate         { get; set; }
}

И моя форма записи написана таким образом для дат:

<table>
    <tr>
        <td>
            <div class="editor-label">
                @Html.LabelFor(model => model.StartDate)
            </div>
        </td>
        <td>
            <div class="editor-label">
                @Html.LabelFor(model => model.EndDate)
            </div>
        </td>
    </tr>
    <tr>
        <td>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.StartDate, new { @class = "datepicker", id="txtStartDate" })
                @Html.ValidationMessageFor(model => model.StartDate)
            </div>
        </td>
        <td>
            <div class="editor-field">
                @Html.TextBoxFor(model => model.EndDate, new { @class = "datepicker", id = "txtEndDate" })
                @Html.ValidationMessageFor(model => model.EndDate)
            </div>
        </td>
    </tr>
</table>

Моя проблема в том, что текстовое поле теперь отображается 01/янв./0001 00:00:00. Итак, сначала: как я могу получить дату, которую нужно сформировать для shortdatestring? Я нашел решение MVC2, в котором рекомендуется создать папку EditorTemplates в SharedFolder и использовать EditorFor вместо этого, но это, похоже, не работает с MVC3. Он также, казалось, не позволял добавлять классы легко, как в TextBoxFor

И во-вторых, как только это исправлено, у меня есть специальная система проверки, которую мне нужно создать. Мне нужно, чтобы дата окончания была после даты начала. Я собираюсь сделать чек с помощью javascript, который я нашел http://www.datejs.com, но есть ли способ сделать валидацию непосредственно в моем классе?

4b9b3361

Ответ 1

Для вашего шаблона редактирования попробуйте это

@model DateTime?
@Html.TextBox("", (Model.HasValue ? Model.Value.ToShortDateString() : string.Empty), new { @class = "datePicker" })

Источник: Шаблон редактора MVC 3 с DateTime

jQuery DateTime сравнения

$('#txtbox').change(function() {
            var date = $(this).val();
            var arrDate = date.split("/");
            var today = new Date();
            useDate = new Date(arrDate[2], arrDate[1] -1, arrDate[0]);

            if (useDate > today) {
                alert('Please Enter the correctDate');
                $(this).val('');
            }
        });

Источник: Сравнение дат JQuery

Ответ 2

есть намного более простой способ сделать это. Просто используйте TextBox, а не TextBoxFor

@Html.TextBox("ReturnDepartureDate", 
    Model.ReturnDepartureDate.ToString("dd/MM/yyyy"))

это имеет то преимущество, что добавляет все ненавязчивые элементы JavaScript и т.д. Также меньше кода!

Ответ 3

Взгляните на этот пример

@Html.TextBoxFor(s => s.dateofbirth, new { Value = @Model.dateofbirth.ToString("dd/MM/yyyy") })

Ответ 4

Если вы украшаете объект viewmodel следующим, вы увидите только часть даты в текстовом поле.

[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:d}")]
public DateTime Date { get; set; }

Затем на вашей странице вы можете просто сделать следующее

@Html.EditorFor(model => model.Date)

Обратите внимание, что это используется стандартный MVC3. У меня нет настраиваемого шаблона редактора даты.

Все кредиты для этого ответа отправляются назначить формат даты аннотациями данных

Ответ 5

//Отображение даты и времени в datePicker - 11/24/2011 12:00:00 AM

//вы можете разбить это по пробелу и установить значение только на дату

Script:

    if ($("#StartDate").val() != '') {
        var arrDate = $('#StartDate').val().split(" ");
        $('#StartDate').val(arrDate[0]);
    }

Разметка:

    <div class="editor-field">
        @Html.LabelFor(model => model.StartDate, "Start Date")
        @Html.TextBoxFor(model => model.StartDate, new { @class = "date-picker-needed" })
    </div>

Надеюсь, это поможет.

Ответ 6

Слишком поздно, но может быть, это может помочь кому-то:

Модель:

[Display(Name = "Date of birth")]
public DateTime? DOB{ get; set; }

HTML:

@Html.TextBoxFor(m => m.DOB, "{0:MM/dd/yyyy}", 
          new { @placeholder="MM/DD/YYYY", @au19tocomplete="off" }) 

JavaScript, чтобы добавить календарь в элемент управления:

$('#DOB').datepicker({changeMonth: true, changeYear: true, 
         minDate: '01/01/1900',  maxDate: new Date});