-1

我的模式是这样的:验证属性

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

我有获取目录号和一组代码视图,我要检查两件事情:

  1. 没有在我们的数据库,目录号
  2. 有这样的目录编号为给定的球队

我屏幕ä是一个属性(源自ValidationAttribute),用于检查我们的数据库中是否有这样的目录号。但它什么也没做!

也许这是不可能的这样的属性检查?

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

我已经做才不至于serverPost(阿贾克斯将是一件好事)

我会很感激一个很好的例子热做到这一点。

p.s. (我们正在使用mvc3)

回答

1

我认为Remote Validation可以帮助你解决这个问题。你可以用它来检查数据库中存在的目录编号:

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); 
} 

我希望这点你在正确的方向来解决。

+0

哇,这是一个非常好的答案!我现在要去试试它。 – gdoron 2011-04-04 05:37:52