Проверка даты - StartDate, EndDate MVC - PullRequest
3 голосов
/ 06 декабря 2010

Мне нужно выполнить проверку для StartDate и EndDate

Проверки:

  • Значение StartDate должно быть меньше или равно Endate.
  • EndDate должно бытьустановить больше или равно начальной дате.

Пока мой код:

объект:

    [DisplayName("Effective Start Date")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
    public DateTime EffectiveStartDate { get; set; }

    [DisplayName("Effective End Date")]
    [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
    public DateTime EffectiveEndDate { get; set; }

Вид:

   </tr>  
          <tr>
            <td class="lables"><%= Html.LabelFor(model => model.EffectiveEndDate)%></td>
            <td class="data" id = "endDate"><%= Html.EditorFor(model => model.EffectiveEndDate)%>
            <%= Html.ValidationMessageFor(model => model.EffectiveEndDate)%></td>
        </tr>  
          <tr>
            <td class="lables"><%= Html.LabelFor(model => model.ErrorCheckEnabled)%></td>
            <td class="data" ><%= Html.TextAreaFor(model => model.ErrorCheckEnabled)%>
             <%= Html.ValidationMessageFor(model => model.EffectiveEndDate)%></td>
        </tr> 

Как я должен идти с проверкой.Должен ли я сделать на сайте клиента на

$("#frm").validate

[или]

???

1 Ответ

1 голос
/ 06 декабря 2010

Это должно быть сказано: вы всегда должны выполнять проверку на стороне сервера, так как пользователь может отключить JavaScript, и, следовательно, ваша проверка не будет применена. Но я рекомендую также выполнить проверку на стороне клиента, чтобы UX был лучше. Проверка на стороне сервера и на стороне клиента может легко существовать одновременно.

Для серверной части вы можете легко создать свой собственный атрибут проверки, производный от класса ValidationAttribute. Посмотрите на этот пример:

[AttributeUsage(AttributeTargets.Property | AttributeTargets.Field | AttributeTargets.Parameter, AllowMultiple = false)]
public class EndDateAttribute : ValidationAttribute
{
    public EndDateAttribute(DateTime endDate)
    {
        EndDate = endDate;
    }

    public DateTime EndDate { get; set; }

    public override bool IsValid(object value)
    {
        if (value == null)
            return false;

        DateTime val;
        try
        {
            val = (DateTime)value;
        }
        catch (InvalidCastException)
        {
            return false;
        }

        if (val >= EndDate)
            return false;

        return true;
    }

}

Вы, вероятно, можете выяснить, как сделать StartDate.

ОБНОВЛЕНИЕ: использовать это довольно просто. Вы просто должны применить его к своим свойствам как любой другой (проверочный) атрибут. Например

[DisplayName("Effective Start Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
[StartDate(DateTime.Now)]
public DateTime EffectiveStartDate { get; set; }

[DisplayName("Effective End Date")]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:MM/dd/yyyy}")] 
[EndDate(new DateTime(2011, 9, 24)]
public DateTime EffectiveEndDate { get; set; }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...