我是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; }
请建议我以哪种方式在可编辑模式下实现此目的。
答案 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);
}
}