在ASP中使用数据注释验证时,是否可以为属性生成计算值?. Net MVC(3)

本文关键字:计算 属性 Net MVC 数据 ASP 注释 验证 是否 | 更新日期: 2023-09-27 17:54:38

正如标题所说,在ASP中使用数据注释验证时,是否有可能为属性生成计算值?. Net MVC (3)?

考虑一个信用卡的例子。信用卡必须有一个截止日期,通常是月和年。在用户界面中,通常最好有select字段供用户选择,而不是text字段。另一方面,当向支付网关发送数据时,它通常是多种格式的字符串:M/Y;MM/YY;MM/YYYY;等。

所以我想要完成的是在验证了两个单独的日期之后生成最后的字符串。

无论如何,如果有人能给我指出正确的方向,那就太棒了。我只使用了内置的属性,所以当我遇到这样的自定义时,我想把我当作一个新手。

在ASP中使用数据注释验证时,是否可以为属性生成计算值?. Net MVC(3)

假设您有月份和年份属性:

[Range(1, 12)]
public int Month { get; set; }
[Range(2011, 2100)]
public int Year { get; set; }

你可以在你的视图模型上有第三个属性来表示所需的值:

public string ExpirationDate
{
    get 
    {
        return new DateTime(Year, Month, 1).ToString("MM/yyyy");
    }
}

因此,一旦您的视图模型成功通过验证,您就可以将ExpirationDate属性发送到支付网关:

[HttpPost]
public ActionResult Pay(PayViewModel model)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }
    PaymentGateway.Pay(model.CCNumber, model.ExpirationDate);
    return RedirectToAction("Success");
}

添加一个不显示在GUI中的属性,并连接您的值:

    class CreditCard
{
    public string ExpirationYear { get; set; }
    public string ExpirationMonth { get; set; }
    public string ExpirationDate
    {
        get
        {
            return string.Format("{0}/{1}", ExpirationMonth, ExpirationYear);
        }
    }
}

或者您可以使用一个方法,在其中提供格式