Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当数字中有逗号时,为什么文本框总是返回null?_C#_Asp.net Mvc - Fatal编程技术网

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

C# 当数字中有逗号时,为什么文本框总是返回null?,c#,asp.net-mvc,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(ItemViewMod

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

//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"/>
//模型
公共类ItemViewModel
{
公共字符串名称{get;set;}
公共十进制?总价格{get;set;}
}
//控制器
[HttpPost]
[多重按钮(Name=“action”,Argument=“Submit”)]
公共行动结果提交(ItemViewModel模型)
{
十进制?a=型号。总价;
控制台写入线(a);
}
//看法
@EditorFor(model=>model.TotalPrice,new{htmlAttributes=new{@class=“form control”}})

当我调试model.TotalPrice时,如果数字中有逗号,例如10234776,则它始终为空,但如果没有逗号,则会得到实际结果。有什么想法吗?

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


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

您的代码需要小数,文本框需要字符串。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;
            }
        }
    }
//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);
}
然后,需要小数的代码可以使用totalPriceDecimal,而您可以将字符串绑定到文本框

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

//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);
}
注:可能不是最好的,但却是可行的解决方案。希望这对你的案子有帮助


注:可能不是最好的,但却是可行的解决方案。希望这对你的情况有所帮助。

我试过了,效果很好 以下是指定的代码和视图

[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() { @EditorFor(model=>model.TotalPrice,new{htmlAttributes=new{@class=“form control”}})
}我试过了,效果很好 以下是指定的代码和视图

[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() { @EditorFor(model=>model.TotalPrice,new{htmlAttributes=new{@class=“form control”}})
}

型号代码是什么?属性上是否有任何验证属性?在某些地方,您需要指定值的解析应允许数千个分隔符。如果使用点(例如)10.234一定要共享ItemViewModel,因为我猜数据绑定可能会有问题。看起来默认的模型绑定器可能在将您的总价输入转换为小数点时遇到问题。一种解决方案是将TotalPrice更改为字符串类型,然后编写逻辑将字符串转换为十进制(带逗号或不带逗号)。模型的代码是什么?属性上是否有任何验证属性?在某些地方,您需要指定值的解析应允许数千个分隔符。如果使用点(例如)10.234一定要共享ItemViewModel,因为我猜数据绑定可能会有问题。看起来默认的模型绑定器可能在将您的总价输入转换为小数点时遇到问题。一种解决方案是将TotalPrice更改为字符串类型,然后编写逻辑将字符串转换为十进制(带逗号或不带逗号)。@chaeusangchen@chaeusangChen问题是以10234776(逗号分隔值)作为输入传递的。问题是以10234776(逗号分隔值)作为输入传递的。