Шаблон десятичного пользовательского редактора ASP.Net MVC - данные не сохраняются - PullRequest
1 голос
/ 19 марта 2012

В моей модели есть следующее поле:

public Decimal AnnualSalary { get; set; }

Отображается в моем представлении как:

@Html.EditorFor(model => model.SelectedPerson.AnnualSalary)

Это дает мне формат данных с двумя десятичными знаками.Я также хотел бы разделитель запятых тысяч.Итак, я создал файл с именем Decimal.cshtml в моей общей |Папка «Шаблоны редактора», которая содержит следующее:

@model Decimal
@Html.TextBox("", Model.ToString("#,##0.00"))

Это дает мне отображение, которое я хочу в редакторе для существующих данных.Однако, когда я иду, чтобы сохранить измененные данные, это не удается.Если я удаляю десятичный шаблон редактора, тогда данные сохраняются нормально.

Я также отмечаю, что без нового шаблона редактора я не получаю ошибку проверки на стороне клиента, если я ввожу запятую в это текстовое поле, однако мои данные все еще не сохраняются.

Как будто проверка на стороне клиента вполне рада принять разделитель тысяч, но что-то на стороне сервера, когда код EF сначала пытается сохранить данные, не похож на разделитель тысяч.

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

Ответы [ 3 ]

1 голос
/ 19 марта 2012

Я бы посоветовал вам сделать SelectedPersonViewModel, где AnnualSalary - это строка, и поместить над ней RegexAttribute с правильным регулярным выражением для проверки.

Вы также можете внутренне проанализировать предоставленную строку и сохранить ее в десятичной переменной, а затем вернуться к вашей модели (в действии после публикации)

РЕДАКТИРОВАТЬ: может быть примерно так, как описано в ответе на этот вопрос: Десятичные значения с разделителем тысяч в Asp.Net MVC

0 голосов
/ 20 марта 2012

Благодаря ссылке, предоставленной Михалом Б. выше, я в итоге нашел ссылку на это решение, предоставленное Филом Хааком .

Я пробовал множество других решений, упомянутых в ссылках, по которым я следовал, но это, безусловно, наиболее полное и общее решение, которое я нашел.

0 голосов
/ 19 марта 2012

модель ожидает, что десятичное значение будет действительным, то же самое для EF. Вы можете добавить десятичное значение в скрытое поле, а затем отобразить текстовое поле со значением годового оклада, отформатированным запятой. Затем с помощью jquery вы можете связать значение скрытого поля при обновлении текстового поля. Таким образом, вы передадите десятичное значение, ожидаемое вашей моделью.

...