MVC3中唯一性的远程验证不适用于可编辑模式

时间:2012-07-03 07:29:36

标签: asp.net-mvc-3

我是MVC3的新手。我使用ItemNo字段作为唯一字段。但该字段可以编辑。如果我使用现有值在ItemNo中创建一个值,那么远程验证工作正常。如果我在可编辑模式下执行此操作,它会像创建Action方法一样重复。

这是我的验证控制器:

 <!-- language: lang-js -->
 [OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
 public class ValidationController : Controller
 {
   ItemControlDBContext db = new ItemControlDBContext();
   public JsonResult IsItemNoAvailable(string ItemNo)
 {
   List<string> ItemNos = (from no in db.Item select no.ItemNo).ToList();
   if (ItemNos.Contains(ItemNo.ToLower()))
 {
   return Json("The ItemNo is already available. Try another.",  JsonRequestBehavior.AllowGet);
 }
   return Json(true, JsonRequestBehavior.AllowGet);
 }

 }

这是我的模型类

[Required]
[Remote("IsItemNoAvailable", "Validation")]
[Editable(true)]
public string ItemNo { get; set; }

请建议我以哪种方式在可编辑模式下实现此目的。

1 个答案:

答案 0 :(得分:4)

您应该使用RemoteAttribute.AdditionalFields属性,并传递模型的Id以进行验证。比起行动,您不仅应该检查数据库ItemNo,还检查Id

[Required]
[Remote("IsItemNoAvailable", "Validation", AdditionalFields = "Id")]
[Editable(true)]
public string ItemNo { get; set; }

和控制器方法(注意我也重新考虑了你的选择)

[OutputCache(Location = OutputCacheLocation.None, NoStore = true)]
public class ValidationController : Controller
{
    ItemControlDBContext db = new ItemControlDBContext();
    public JsonResult IsItemNoAvailable(string ItemNo, int ID=0)
    {
        bool itemNoAlreadyExists = db.Item.Any(item => item.ItemNo == itemNo && item.ID != ID);

        if (itemNoAlreadyExists)
        {
            return Json("The ItemNo is already available. Try another ItemNo.", JsonRequestBehavior.AllowGet);
        }
        return Json(true, JsonRequestBehavior.AllowGet);
    }

}