2

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

这是我的验证控制器:

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

请建议我以何种方式可以在可编辑模式下实现这一目标。

4

1 回答 1

4

您应该使用RemoteAttribute.AdditionalFields属性,并通过Id您的模型进行验证。比实际操作时,您不仅应该检查 db ,还应该检查ItemNodb 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);
    }

}
于 2012-07-03T07:48:36.620 回答