更新
我发现了问题,异常来自同一表单上的第二个字段,它确实应该提示它(因为它是空的)......我正在查看一个我认为来自尝试解析一个字符串的错误,事实上,它是因为试图解析另一个字符串......抱歉浪费你的时间。
原始问题
我完全被这个问题弄傻了。我基本上是在跑步int.Parse("32")
,它会抛出一个FormatException
. 这是有问题的代码:
private double BindGeo(string value)
{
Regex r = new Regex(@"\D*(?<deg>\d+)\D*(?<min>\d+)\D*(?<sec>\d+(\.\d*))");
Regex d = new Regex(@"(?<dir>[NSEW])");
var numbers = r.Match(value);
string degStr = numbers.Groups["deg"].ToString();
string minStr = numbers.Groups["min"].ToString();
string secStr = numbers.Groups["sec"].ToString();
Debug.Assert(degStr == "32");
var deg = int.Parse(degStr);
var min = int.Parse(minStr);
var sec = double.Parse(secStr);
var direction = d.Match(value).Groups["dir"].ToString();
var result = deg + (min / 60.0) + (sec / 3600.0);
if (direction == "S" || direction == "W") result = -result;
return result;
}
我的输入字符串是"32 19 17.25 N"
上述代码在 ASP.NET MVC 3 Web 应用程序(使用 Razor 作为其视图引擎)上的 .NET 4 Web 托管服务 (aspspider) 上运行。
注意的断言degStr == "32"
是有效的!此外,当我采用上述代码并在控制台应用程序中运行它时,它工作得很好。我在网上搜索了答案,没有...
有任何想法吗?
更新(堆栈跟踪)
[FormatException: Input string was not in a correct format.]
System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal) +9586043
System.Number.ParseInt32(String s, NumberStyles style, NumberFormatInfo info) +119
System.Int32.Parse(String s) +23
ParkIt.GeoModelBinder.BindGeo(String value) in C:\MyProjects\ParkIt\ParkIt\GeoBinder.cs:42
第 42 行是var deg = int.Parse(degStr);
并注意异常在System.Int32.Parse
(不是System.Double
建议的那样)。