【问题标题】:Validation attribute in asp.net mvcasp.net mvc 中的验证属性
【发布时间】:2011-04-03 13:57:15
【问题描述】:

我的模型是这样的:

public class Line
{
    public int CatalogNumber {get; set;}
    public int TeamCode {get; set;}
}

我有一个获取目录号和团队代码的视图,我想检查两件事:

  1. 我们的数据库中有这样的目录号
  2. 给定团队有这样的目录号

我编写了一个属性(派生自ValidationAttribute)来检查我们的数据库中是否存在这样的目录号。但它什么也没做!

也许不可能用属性进行这种检查?

(我知道我可以实现 IValidable 并覆盖 IsValid 方法,但出于我自己的原因,我更喜欢使用属性)。

我必须在没有 serverPost 的情况下这样做(ajax 会很好)

我真的很感激一个很好的例子。

附言(我们使用的是mvc3)

【问题讨论】:

    标签: model-view-controller asp.net-mvc-3 attributes custom-attributes


    【解决方案1】:

    我认为远程验证可以帮助您解决这个问题。您可以使用它来检查目录号是否存在于数据库中:

    public class Line
    {
        [Remote("QueryCatalogNumberExists", "Home")]
        public int CatalogNumber { get; set; }
        public int TeamCode { get; set; }
    }
    

    然后在你的控制器中(我没有测试过这段代码,但它应该是类似的东西):

    public JsonResult QueryCatalogNumberExists(int catalogNumber)
    {
        if (_repository.QueryCatalogNumberExists(catalogNumber))
        {
            return Json(true, JsonRequestBehavior.AllowGet);
        }
        return Json(false, JsonRequestBehavior.AllowGet); 
    }
    

    我相信您还可以有其他字段,以便您可以检查目录号对于给定的 TeamCode 是否有效(我认为 TeamCode 必须可以为空,因为用户可能无法在输入目录号之前输入当前模型作为团队代码不是必需的)。所以你的模型是:

    public class Line
    {
        [Remote("QueryCatalogNumberExistsForTeamCode", "Home", AdditionalFields = "TeamCode")]
        public int CatalogNumber { get; set; }
        public int TeamCode { get; set; }
    }
    

    和控制器代码:

    public JsonResult QueryCatalogNumberExistsForTeamCode(int catalogNumber, int? teamCode)
    {
        if (_repository.QueryCatalogNumberExistsForTeamCode(catalogNumber, teamCode))
        {
            return Json(true, JsonRequestBehavior.AllowGet);
        }
        return Json(false, JsonRequestBehavior.AllowGet); 
    }
    

    我希望这会为您指明解决方案的正确方向。

    【讨论】:

    • 哇,这是一个非常好的答案!我马上去试试。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多