2010-12-04 1 views
4
public Decimal SalePrice { get; set; } 

идесятичного entery данных в ASP MVC

<%= Html.TextBoxFor(Model => Model.SalePrice) %> 

Что является хорошим способом для обеспечения проверки или надлежащей записи ввода от пользователя? Такие вещи, как только допускают числовые enteries и до двух десятичных знаков?

ответ

7

Регулярное выражение, как должно работать:

\A\d+(\.\d{1,2})?\Z 

Это соответствует вход как:

2.00 
25.70 
04.15 
2.50 
525.43 
423.3 
52 

И, как предложил Майк, вы могли бы используйте это в атрибуте проверки данных:

[RegularExpression(@"\A\d+(\.\d{1,2})?\Z", ErrorMessage="Please enter a numeric value with up to two decimal places.")] 
public Decimal SalePrice { get; set; } 

Edit: В ответ на ваши два вопроса:

1) Это подтверждает на право и представить не тогда, когда мы теряем фокус этой области?

Предполагая, что вы добавили атрибут, тогда да проверка выполняется при отправке. Технически проверка выполняется после того, как параметры формы привязаны к модели. Однако, на самом деле использовать это, необходимо проверить параметр проверки в контроллере:

public ActionResult MyController(MyModel model) 
{ 
    if (ModelState.IsValid) 
    { 
     // do stuff 
    } 
    else 
    { 
     // Return view with the now-invalid model 
     // if you've placed error messages on the view, they will be displayed 
     return View(model); 
    } 
} 

Чтобы иметь проверки происходят на стороне клиента в дополнение к серверной стороне, вы должны использовать JavaScript. Основной пример этого с помощью проверки Microsoft AJAX - Scott Gu's blog.

2) Можете ли вы показать мне регулярное выражение, где максимальная запись не может превышать 100,00 и мин записи не могут быть ниже 1,00

Вы могли бы сделать это в регулярном выражении как-то, но регулярное выражение не предназначены ни для чего больше, чем сопоставление шаблонов. Лучший способ сделать это - добавить атрибут проверки диапазона, в дополнение к вашему атрибуту regex. Итак, теперь ваша собственность будет выглядеть так:

[RegularExpression(@"\A\d+(\.\d{1,2})?\Z", ErrorMessage="Please enter a numeric value with up to two decimal places.")] 
[Range(1.00m, 100.00m)] 
public Decimal SalePrice { get; set; } 

Приведенный выше код не проверен, но общий подход должен работать.

+0

Спасибо и большое объяснение кстати. Я обязательно попробую это. – VoodooChild 2010-12-05 01:32:00

1

Вы можете использовать строку регулярного выражения для проверки ввода на стороне клиента и сервера.

Если вы поместите атрибут RegularExpression в действие вашего контроллера, вы можете указать, используя строку регулярного выражения, в каком формате должно следовать это поле. Используя этот атрибут, вы получите подтверждение на стороне клиента и сервера (при условии, что вы используете MVC 2.0 или более позднюю версию).

[RegularExpression("*YourRegexExpression*", ErrorMessage="You must provide a decimal value.")] 

Я надеюсь, что это поможет.

См. Сообщение в блоге Скотта Гу, в котором говорится о проверке модели для получения дополнительной информации.

http://weblogs.asp.net/scottgu/archive/2010/01/15/asp-net-mvc-2-model-validation.aspx

Майк

Смежные вопросы