字符串格式的.NET数据注释

时间:2015-06-02 10:39:26

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

我正在开发一个ASP.NET MVC项目,需要一些关于使用数据注释进行字符串格式化的帮助。

所以我有一个字符串道具ID必须采用这种形式:nnn/nnnnn/nnn(其中n代表十进制值)和最后3位数必须是:999-前3位数。

例如:123/12345/876

有人可以帮我解决这个问题,并了解格式化的实际效果吗?

谢谢: - )

4 个答案:

答案 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
  • 在我的Main类中使用此类,我在其上面使用ID [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