【问题标题】:Parsing in C# MVC asp.net Model在 C# MVC asp.net 模型中解析
【发布时间】:2017-02-08 06:18:31
【问题描述】:

家庭作业动手操作。

我有一个模型可以在 html 页面中生成一个简单的添加表单。视图模型用于处理必需值(例如:[Required(ErrorMessage = "Missing a number, please enter decimals to add.")]

但是,在Domain 模型中,我需要TryParse 两个输入字段来验证输入的值是十进制值(正数或负数)。我试图根据 [Range]、一个简单的TryParseParse 以及我知道该怎么做但无法绕过异常以实际看到错误消息的所有其他事情进行过滤(如上面的“缺少一个数字, 请输入小数添加")。我在这个网站和许多其他网站上搜索过,包括:

以及更多...任何帮助将不胜感激。

public class MyAbacusDomainModel
{
  public MyAbacusDomainModel(string number1, string number2)
  {
    Number1 = number1;
    Number2 = number2;
    Sum = CalculateSum(number1, Number2);
  }

  public string Sum { get; set; }
  public string Number1 { get; set; }
  public string Number2 { get; set; }

  // need to parse the two number values here to get the boolean results

  private string CalculateSum(string number1, string number2)
  {
    double number1double = Convert.ToDouble(number1);
    double number2double = Convert.ToDouble(number2);
    double sum = (number1double + number2double);
    return sum.ToString();    
  }              
}

【问题讨论】:

  • 您能解释一下为什么要在字符串中存储数字吗?您为什么不简单地将您的 Number1/2 声明为双/十进制?
  • 也许使用contracts
  • 作业的代码 sn-p 是字符串(只有数字),讲师没有给出任何说明,所以我将其转换为双精度,但仍试图通过异常。

标签: c# asp.net asp.net-mvc asp.net-mvc-5


【解决方案1】:

您可以将 viewmodel 属性设置为 double 吗?带有必需和范围属性的类型。

您不需要检查值是否为 double,因为如果 ModelState.IsValid 在控制器的操作中为 true,它们将始终是好的值。

[Required]
public double? Number {get; set;}

如果在您的域模型中需要使用字符串值,那么您可以将输入解析为字符串。它始终是双精度值,因此您无需进行任何额外检查。

如果您的作业没有这样的要求,那么建议更改为您的域模型存储值的类型。将数字存储为字符串是不常见且错误的。

【讨论】:

    【解决方案2】:

    这有帮助吗?

    decimal number;
    
    // Parse a floating-point value with a thousands separator.
    
    var value = "1,643.57";
    
    Decimal.TryParse(value, out number);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 2014-12-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多