为什么数字中有逗号时文本框总是返回null?

时间:2019-04-01 07:56:10

标签: c# asp.net-mvc

我有一个控制器,视图和模型如下

//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"/>

当我调试模型时。如果有逗号(例如10,234,776),TotalPrice始终为null,但是如果没有逗号,它将获得实际结果。有什么主意吗?

3 个答案:

答案 0 :(得分:1)

//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);
}

注意:也许不是最好的,但可行的解决方案。希望这对您有帮助。

答案 1 :(得分:0)

您的代码需要一个小数,文本框需要一个字符串。 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,而您可以将字符串绑定到文本框。

更重要的是,如果用户输入了无法解析的内容,您就会知道并可以显示错误消息。

答案 2 :(得分:0)

我试过了,它工作正常 以下是代码和分配的视图

[HttpPost]

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

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

// ================================================ =====

@model WebApplication4.Controllers.ItemViewModel

@ Html.BeginForm() {     @ Html.EditorFor(model => model.TotalPrice,新{htmlAttributes =新{@class =“ form-control”}})      }