web 2.0

Осторожно, Timespan.TotalMinutes и Timespan.Minutes это не одно и то же

Timespan.Minutes возвращает ту часть разницы, которая соответствует минутам. (Предположим, что разница была 1 час 24 минуты, результат будет 24)

Timespan.TotalMinutes возвращает вам разницу между датами в минутах. (Если разница была 1 час 24 минуты, результат будет 84)

Когда-то помню пришлось вычислять минуты и секунды до окончания аукциона. Представьте себе, что это выглядело так:

20:01:00

00:00:59 

и вдруг

19:59:59

Так прыгал счётчик пару часов, пока кто-то не заметил ошибку и пришлось её исправлять.

код:
static void Main(string[] args)
		{
			double diff = GetDifference(DateTime.Now, DateTime.Now.AddMinutes(-85));
		}

		static double GetDifference(DateTime dt1, DateTime dt2)
		{																									                     							
			TimeSpan diff = dt1 - dt2;
			return diff.TotalMinutes;
		}
 
 

Tags:

код

Как удалить сообщение валидации "The field must be a number"

 

При использовании валидации полей на стороне клиента, появляются некоторые сообщения на английском языке. Например:

The field must be a number

Это сообщение не так просто удаляется. Поскольку разработчики майкрософта включили это в MVC в самый последний момент, они уже не позаботились о жителях других странах и национальностях, чтобы им было удобно читать подобное сообщение на своём языке.

В результате эксперты предлагают разные решения:

  • Не использовать валидацию на стороне клиента
  • Не использовать ClientDataTypeModelValidatorProvider
  • Заменить ClientDataTypeModelValidatorProvider на свой провайдер

 

В поисках самого решения, я нашёл самый оптимальный выход, который подходит моим требованиям. В этом решении используется валидация javascript на стороне клиента, и не отображается несчастное сообщение на английском языке “The field must be a number”.

Итак делаем следующее:

В моделе пишем настройки валидации:

public class Product
{
[Range(100, 1000)]
public int QuantityInStock { get; set; }
  public decimal Cost { get; set; }
}

На стороне контроллера, добавляем следующий код, удаляющий валидацию типов на стороне клиента:

 

// Удаляем Провайдр валидации типов со стороны клиента, чтобы не появлялось сообщение на англ.
// The field xxxx must be a number
foreach (ModelValidatorProvider prov in ModelValidatorProviders.Providers)
{
	if (prov.GetType().Equals(typeof(ClientDataTypeModelValidatorProvider)))
	{
		ModelValidatorProviders.Providers.Remove(prov);
		break;
	}
}

 

Другой простой способ, который может помочь - это RegularExpression, например:

RegularExpression("\\d{12}", ErrorMessage = "Пожалуйста вводите не более 12 цифр в поле телефона")]

Можно также и добавить собственный провайдер для валидации типов данных на стороне клиента. Подробнее об этом на английском языке можно найти информацию здесь:

http://jwwishart.wordpress.com/2010/03/22/custom-server-and-client-side-required-validator-in-mvc-2-using-jquery-validate/

 

Tags: , ,

Blog