我正在开发一个ASP.NET MVC项目,需要一些关于使用数据注释进行字符串格式化的帮助。
所以我有一个字符串道具ID必须采用这种形式:nnn/nnnnn/nnn
(其中n代表十进制值)和最后3位数必须是:999-前3位数。
例如:123/12345/876
有人可以帮我解决这个问题,并了解格式化的实际效果吗?
谢谢: - )
答案 0 :(得分:1)
关于你最近的评论:
[DisplayFormat(DataFormatString = "{0;###/####")]
我相信,但我不认为你可以在ID的最后部分执行所需的逻辑。
Hene以下解决方案。您可以随时让属性{get;
具有该逻辑
...
int id = 123;
int middleId = 12345;
string propertyId = string.Format("{0}/{1}/{2}",id,middleId,GetTrailingId(id).ToString());
...
private int GetTrailingId(int prefixId)
{
const int upperLimit = 999;
return upperLimit - prefixId;
}
答案 1 :(得分:1)
我找到了答案:由于我是C#的初学者,我不知道有一个ValidationAttribute
类允许我自己创建DataAnnotation
来验证ID。这就是我所做的:
IDVerification
ValidationAttribute
[IDVerification]
。如果有人想看课,那就是here。
答案 2 :(得分:0)
var input = "123/12345/876";
var ints = input.Split('/').Select(int.Parse).ToArray();
Debug.Assert(ints[0] + ints[2] == 999);
答案 3 :(得分:0)
我并不完全清楚您正在尝试完成的内容,但此片段可能会有所帮助。如果您提供更多信息,我们可能会提供更多帮助。此代码段将小数格式化为整数,并假设输出了两个数字。第一个斜线是否应该代表小数点,所以实际上,该字符串只涉及一个数字?
class MyClass
{
public decimal Id { get; set; }
public decimal OtherNumber { get; set; }
public override string ToString()
{
return string.Format("{0:000}/{1:0000}/{2:000}", this.Id, this.OtherNumber, 999.0m - this.Id );
}
static void Main(string[] args)
{
Console.WriteLine(new MyClass { Id = 123.0m, OtherNumber = 1234.0m }); // 123/1234/876
Console.WriteLine(new MyClass { Id = 12.3m, OtherNumber = 123.4m }); // 012/1234/987
}
}
有关格式化字符串的详细信息,请参阅https://msdn.microsoft.com/en-us/library/system.string.format(v=vs.110).aspx