您可以在處理您的HTTP POST操作方法使用此表單提交
[HttpPost]
public ActionResult Create(Projet model)
{
var exist = db.Projects.Any(s=>s.SeqNumber===model.SeqNumber
&& s.ProjectId!=model.ProjectId);
if(exist)
{
ModelState.AddModelError(string.empty,"Sequence number is already in use");
return View(model);
}
// to do : Continue with your save
}
現在,當用戶提交表單時,如果正在使用的序列號是任何其他項目,它會拋出一個驗證信息。確保您在視圖中使用驗證摘要助手來呈現驗證錯誤消息。
@model Project
@Html.ValidationSummary(false)
@using(Html.BeginForm())
{
<!-- your existing code goes here-->
}
現在爲了提供良好的用戶體驗,您可以利用遠程驗證功能。它所做的是,當用戶從輸入中取出焦點時,它會對服務器進行ajax調用,以檢查您的SequenceNumber是否存在於db中。根據結果,驗證消息將顯示給用戶。
要做到這一點,請使用Remote
屬性來修飾您的財產。
[Required]
[System.Web.Mvc.Remote("CheckSeqNumber", "Project",
ErrorMessage = "SeqNumber is already used!")]
public int SeqNumber { get; set; }
現在確保您有一個名爲CheckSeqNumber
操作方法返回true或false作爲一個JSON響應。
public ActionResult CheckTagName(int SeqNumber)
{
var exist= !db.Projects.Any(g => g.SeqNumber == SeqNumber);
return Json(exist,JsonRequestBehavior.AllowGet);
}
此外,請確保您已加載相關的JavaScript文件來做這個不顯眼的驗證。
<script src="~/Scripts/jquery.validate.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.js"></script>
另一種方法是寫一個做到這一點檢查你(如果你不喜歡的動作方法檢查),自定義驗證屬性。 Here是一個SO帖子,解釋如何做到這一點。
我想你是尋找*遠程驗證*一個好地方開始:https://msdn.microsoft.com/en-us/library/gg508808(vs.98).aspx – Daniel
驗證沒有錯誤創建操作中的值。事實上,根據該領域的語義,這可能是一個業務規則,在這種情況下,它應該在後端進行驗證。話雖如此,你總是可以用一些JS編寫你自己的驗證方案,並在後端(像Web服務或類似的東西)上啓動一個方法來查看值是否存在。儘管如此,我仍然建議在後端做它。 – JuanR