2017-07-17 19 views
0

我需要驗證一個輸入是唯一的或不插入到數據庫之前。我在模型類中使用了遠程驗證屬性。在ASP中使用遠程驗證。網絡MVC應用程序創建和編輯視圖

[Required(ErrorMessage = "Package name Required")] 
[Remote("IsNameAvailble", "Package", ErrorMessage = "Sorry!!! This name have entered for another package")] 
public string packagename { get; set; } 

查看

<div class="form-group"> 
<label class="control-label">Package Name</label> 
@Html.TextBoxFor(model => model.package_name, new { @class = "form-control", placeholder = "Name for the Package", type = "text", autofocus = "autofocus", id = "packagename" }) 
@Html.ValidationMessageFor(model => model.package_name) 
</div> 

這是控制器代碼

public ActionResult IsNameAvailble(string package_name) 
     { 
      Dbfile db = new Dbfile(); 
      var exist= db.GetAllList().FirstOrDefault(m => m.package_name == package_name); 
      if (exist!= null) 
      { 
       return Json(false, JsonRequestBehavior.AllowGet); 
      } 
      else 
      { 
       return Json(true, JsonRequestBehavior.AllowGet); 
      } 
     } 

這是在增加一個新的名字 但在編輯部工作完美的,如果我們改變其它值(比包名以外,它檢查並顯示錯誤信息)

所以我需要一種方法與選擇的ID檢查(如果我們有選擇的ID檢查,THN創建功能將無法正常工作)

請任何人建議答案提前

+0

問題並不清楚。你需要一種方法來檢查選中的「它」。請使用完整的句子。只是在這裏猜測......在編輯時,將ID傳遞到視圖中,然後在提交時從視圖中獲取ID。使用'db.Find(id)'來檢查一個條目是否存在。 – lloyd

+0

您需要使用'[Remote]'屬性的'AdditionalFields'屬性將ID值傳遞給rhe方法,以便您可以從查詢中排除當前對象。 –

+0

@StephenMuecke如何使用AdditionalFields屬性,可以說它是否是電子郵件,您可以給出一個快速說明或給我一個參考點來實現它 –

回答

0

謝謝你把這個工作,你需要改變你的Remote Attribute通過以下:

[Remote("IsNameAvailble", "Package", HttpMethod = "POST", AdditionalFields = nameof(PackageId), ErrorMessage = "Sorry!!! This name have entered for another package.")] 

,你也需要使用以下更改方法簽名:

public ActionResult IsNameAvailble(YourModel modelData) 
{ 
    // You can access PackageName and PackageId by modelData.PackageName and 
    // model.PackageId 
    // Also you can check if Id already exist 

} 

這樣你就可以解決你的編輯視圖問題!

0

步驟1: - 在遠程屬性中添加AdditionalFields

[Remote("IsNameAvailble", "Package", AdditionalFields = "id", ErrorMessage = "Sorry!!! This name have entered for another package")] 
public string packagename { get; set; } 

步驟2: - 通過在IsNameAvailble方法ID參數,並且還添加通過其可以我們檢查id爲大於零的條件,那麼LAMDA表達應與ID和名稱查詢的記錄否則只是檢查名稱。

public ActionResult IsNameAvailble(string package_name,int id=0) 
     { 
      Dbfile db = new Dbfile(); 
      var exist= db.GetAllList().FirstOrDefault(m => m.package_name == package_name); 
      if (exist!= null) 
      { 
       return Json(false, JsonRequestBehavior.AllowGet); 
      } 
      else 
      { 
       return Json(true, JsonRequestBehavior.AllowGet); 
      } 
     } 
+0

你如何使用ID? –

+0

@UmarAftab如果你創建記錄,那麼將變爲0,並且對於編輯模式,傳遞實際併爲你的lamda表達式添加邏輯。 –

相關問題