Проблема с привязкой модели MVC3 к десятичной, а не к целой - PullRequest
1 голос
/ 26 августа 2011

У меня есть вызов AJAX с моей веб-страницы, отправляющий следующие данные в мой метод действия MVC3.

{
  "name":"Test",
  "newitems":[
    {"id":15,"amount":100,"unit":"gram"},
    {"id":1,"amount":75,"unit":"gram"},
    {"id":46,"amount":25,"unit":"gram"}
  ]
}

В моем контроллере у меня есть следующие классы:

public class NewDataItem
{
  public string name { get; set; }
  public List<NewDataItemDetails> newitems { get; set; }
}

public class NewDataItemDetails
{
  public int id { get; set; }
  public int amount { get; set; }
  public string unit { get; set; }
}

ИМетод действия, получивший запрос, имеет NewDataItem в качестве параметра.Это прекрасно работает, однако свойство количества NewDataItemDetails не всегда может содержать int.Это может быть, например, 50,45.Поэтому из-за этого я изменил строку public int amount { get; set; } на public decimal amount { get; set; }.

После того, как это изменение всегда показывается как 0, а не как правильное значение, которое было, когда оно было int.

Почему MVC не может связать значение со свойством, когда оно является десятичным, когда оно отлично работает как int?

Ответы [ 5 ]

1 голос
/ 16 февраля 2012

См. Ответ здесь Связыватель модели ASP.NET MVC 3 по умолчанию не связывает десятичные свойства из правила создания DecimalModelBinder. Это работает, и это также поддерживает всю проверку модели, работающей, (некоторые другие решения используют десериализацию, которая может остановить работу проверки.

1 голос
/ 26 августа 2011

Я обнаружил проблему.

Если я изменю строку "amount":100, на "amount":"100",, она будет работать нормально.Кажется, что MVC ModelBinder может управлять преобразованием строки в десятичное, но не int в десятичное.

0 голосов
/ 19 ноября 2014

Если вы не хотите менять связующее звено модели, вы можете создать объект json и преобразовать сумму в строку. Для меня это будет нормально работать.

var test={"amount":""};
var test1={"amount":100}
test.amount=test1.amount.toString();
0 голосов
/ 27 октября 2011

Я знаю, что немного опоздал с этим, но есть другое решение, которое работает, ничего не меняя, пока MVC не исправит это (я верю, что это в их конце).значение, если оно должно быть десятичным, но является круглым числом.Для тех, кого я знаю, должны быть значения валют, я знаю, что это не имеет никакого эффекта и будет округлятьДля тех, кто не знает их значения и это может повлиять на это, я удаляю 0,00001 из значения после привязки в mvc.Привязка работает правильно, так как это больше не int в глазах mvc

0 голосов
/ 26 августа 2011

Ваш тип (класс) Свойство NewDataItemDetails имеет тип int.

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

Это позволит вам не расширять привязку модели по умолчанию и не учитывать ваше поведение.

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

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