ввод десятичных данных в ASP MVC - PullRequest
4 голосов
/ 04 декабря 2010
public Decimal SalePrice { get; set; }

и

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

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

Ответы [ 2 ]

7 голосов
/ 04 декабря 2010

Должно работать регулярное выражение, подобное следующему:

\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; }

Редактировать: В ответ на два ваших вопроса:

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 является блог Скотта Гу .

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

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

[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; }

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

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

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

Если вы добавите атрибут 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

Майк

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