2013-07-05 72 views
1

在我的MVC應用程序中,我有這個使用JQuery/AJAX自動完成的視圖,其中這是一個摘錄;MVC Autocomplete驗證

<input type="search" name="searchPrimaryTrade" id="searchPrimaryTrade" 
     data-scd-autocomplete="@Url.Action("AutocompletePrimaryTrade", "DataService")" 
     style = "width: 300px;" data-val="true" class="primaryTrade required" data-val-required="Must enter a Primary Trade"  /> 
<input type="button" id="ResetPrimaryTrade" value="Reset" class="resetSearch" data-scd-target-searchId="searchPrimaryTrade" style="margin-top:-6px; height:30px;"/><br/> 
@Html.HiddenFor(model => model.PrimaryTradeId) 
@Html.ValidationMessageFor(model => model.PrimaryTradeId, "*") 

當用戶選擇自動完成項目時,我使用JQuery填充隱藏字段; @Html.HiddenFor(model => model.PrimaryTradeId)

我的老闆告訴我,如果用戶在這個字段中輸入了一個值,但沒有從自動完成中選擇,那麼當他點擊該字段時,應該立即顯示一條錯誤消息。

我該如何實施?

回答

1

您可以創建一個自定義的驗證屬性是這樣的:

public class PrimaryTradeAttribute : ValidationAttribute 
{ 
    public override bool IsValid(object value) 
    { 
     if (value != null && value is int) 
     { 
      var unitOfWork = new UnitOfWork(); 
      int primaryTradeId = (int)value; 

      // Code to check if the PrimaryTradeId exists in the database... 
      if (unitOfWork.PrimaryTradeRepository().Find(primaryTradeId) == null) 
      { 
       return false; 
      } 
     } 

     return true; 
    } 
} 

然後,你可以使用這個屬性在你的模型是這樣的:

[PrimaryTrade] 
public int PrimaryTradeId { get; set; }