Проблема с плагином jQuery MaskMoney и десятичным типом поля (таблица SQL SERVER) - PullRequest
1 голос
/ 16 апреля 2009

Я использую ASP.NET MVC framework, библиотеку jQuery (1.3.2), linq to sql, sql server 2005.

У меня проблема с плагином jQuery MaskMoney для сохранения данных в таблице sql server.

Я создал таблицу, в которой в этой таблице есть поле «valueProducts» типа Decimal (18,2).

На моей странице есть html-поле с jQuery maskmoney. Пример: 10.000,00 (Десять тысяч (R $)).

Когда я сохраняю эти данные, возникает эта ошибка: "Модель типа 'MercanteWeb.Dados.MateriasPrimasEntradas' не была успешно обновлена." (Я использую UpdateModel для сохранения данных).

Я обнаружил, что эта проблема возникает из-за разделителя тысяч (.), И если я удаляю этот плагин маски, это работа.

Кто-то может мне помочь?

Спасибо.

Ответы [ 4 ]

2 голосов
/ 17 апреля 2009

Я сделал это.

Проблема ответа выше заключается в отображении данных Linq to SQL. Поля типа money или smallmoney отображаются с использованием десятичного типа.

Решение, которое я нашел, было ...

Я не сохраняю денежные поля вида, используя UpdateModel.

до:

Check c = new Check();
this.UpdateModel(c, new[] { "number", "name", "value1", "value2" });

после

Check c = new Check();
this.UpdateModel(c, new[] { "number", "name" });
c.value1 = Convert.ToDecimal(f["value1"]);
c.value2 = Convert.ToDecimal(f["value2"]);

При этом значение успешно конвертируется для десятичного типа данных.

В представлении я использовал объекты пространства имен Globalization.

//ViewPage
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %>
<%@ Import Namespace="System.Globalization" %>
<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" runat="server">

<% 
NumberFormatInfo LocalFormat = (NumberFormatInfo)NumberFormatInfo.CurrentInfo.Clone();
LocalFormat.CurrencySymbol = "";

Check c = (Check)ViewData.Model;

%>

//In the field, I use de string format type currency and I passed the object of //CurrentSymbol
...
Value1:<br>
<%= Html.TextBox("value1", Convert.ToDouble(c.value1).ToString("C", LocalFormat))%>
....
</asp:Content>

Спасибо, что помогли мне.

1 голос
/ 17 апреля 2009

Вы можете удалить разделители:

$("#real").maskMoney({symbol:"R$",decimal:"",thousands:""});

Или проанализируйте число в asp.net, удалив их, и это сработает. Я не знаком с asp.net, поэтому не могу дать вам синтаксис.

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

0 голосов
/ 20 апреля 2011

Я поддерживаю плагин jquery-maskmoney. Как вы можете видеть на домашней странице плагина , вы можете отключить разделитель тысяч. Что-то вроде:

$("#currency").maskMoney({thousands:""});
0 голосов
/ 17 апреля 2009

Если данные записываются непосредственно в базу данных в виде строки, SQL Server поддерживает только основные числовые форматы Великобритании / США, например, 10000.00. Вам придется очистить данные либо в базовом, либо в числовом формате, прежде чем переходить на SQL Server.

См. Также этот вопрос: учитывает ли SQL Server язык / локаль при преобразовании значений в / из строк?

Даты и сортировка текста могут быть адаптированы к локали и т. Д., Но не к числовым форматам.

Кроме того, я бы предположил, что деньги или мелкие деньги были бы лучшим типом данных с точки зрения как эффективности, так и производительности: число с плавающей запятой, десятичное число по сравнению со статьей типа данных и блок-схемой денег

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