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

plsは私が編集可能なモードでこれを達成することができる方法を私に提案します。

4

1 に答える 1

4

RemoteAttribute.AdditionalFieldsプロパティを利用しId、検証のためにモデルを渡す必要があります。実際に動作するよりも、dbをチェックするだけでなく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);
    }

}
于 2012-07-03T07:48:36.620 に答える