почему текстовое поле всегда возвращает ноль, если в числах есть запятые? - PullRequest
1 голос
/ 01 апреля 2019

У меня есть контроллер, вид и модель, как показано ниже

//model
public class ItemViewModel
{
   public string name {get;set;}
   public decimal? TotalPrice { get; set; }
}

//controller
[HttpPost]
[MultipleButton(Name = "action", Argument = "Submit")]
public ActionResult Submit(ItemViewModel model)
{
   decimal? a = model.TotalPrice;
   Console.WriteLine(a);
}

//view
@Html.EditorFor(model => model.TotalPrice, new { htmlAttributes = new { @class = "form-control" } })
<input type="submit" name="action:Submit" class="btn btn-primary" value="Submit"/>

когда я отлаживаю модель.TotalPrice всегда равен нулю, когда в числе есть запятые, например, 10,234,776, но если запятая отсутствует, он получает фактический результат. есть идеи?

Ответы [ 3 ]

0 голосов
/ 01 апреля 2019
//Change your ItemViewModel like
public class ItemViewModel
{
    public string name { get; set; }
    public string TotalPrice { get; set; }
}
//Introduce your custom Parser to handle the comma case
private  bool MyTryParse(string toParse, out decimal result)
{
    //Remove commas
    string formatted = toParse.Replace(",", "");

    return decimal.TryParse(formatted, out result);
}

//And your controller be like
[HttpPost]
[MultipleButton(Name = "action", Argument = "Submit")]
public ActionResult Submit(ItemViewModel model)
{
    decimal a = null;

    if (MyTryParse(model.TotalPrice, out a))
    {
        //Success code
    }
    else
    {
        //some error code
    }

    Console.WriteLine(a);
}

Примечание: не самое лучшее, но работоспособное решение.Надеюсь, это поможет вашему делу.

0 голосов
/ 01 апреля 2019

Я попробовал, и он работает нормально. Ниже приведен код и присвоенное представление

[HttpPost]

public ActionResult Submit(ItemViewModel model)
 {
   decimal? a = model.TotalPrice;
   Console.WriteLine(a);
   return View();
 }

public ActionResult Submit()
  {
    return View();
  }

// ===================== Просмотр ==================================

@ модель WebApplication4.Controllers.ItemViewModel

@ Html.BeginForm () {@ Html.EditorFor (model => model.TotalPrice, new {htmlAttributes = new {@class = "form-control"}})}

0 голосов
/ 01 апреля 2019

Ваш код нуждается в десятичной дроби, текстовое поле нуждается в строке. ViewModel, где вы делаете преобразование.

private decimal totalPriceDecimal;
private string totalPriceString;

    public string TotalPrice
    {
        get
        {
            return this.totalPriceString();
        }

        set
        {
            this.totalPriceString = value;

            decimal temp;
            if (int.TryParse(value, out temp))
            {
                this.totalPriceDecimal = temp;
            }
        }
    }

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

Что еще более важно, если пользователь вводит что-то, что не может быть проанализировано, вы знаете и можете отобразить сообщение об ошибке.

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