2017-08-22 60 views
-1

讓我解釋我的問題。我正在使用MVC C#應用程序使用此日曆顯示事件 - https://fullcalendar.io/。這些事件是法庭聽證會。我的一個過濾器是「judgePanel」。 judgePanel屬性是一個字符串(id屬性是「judgePanel」 - 這個屬性有一些問題,所以最後我們以這種方式離開了它)。DropDownListFor驗證不起作用

這是我的模型:

[Required(ErrorMessage = "* The field is required.")] 
public string id { get; set; } 

這是我的看法:

<div class="col-md-3"> 
    @Html.DropDownListFor(x => x.id, Model.JudgePanels, "choose a judgePanel", new { id = "juror-id", @class = "form-control" })   
</div> 
@Html.ValidationMessageFor(x => x.id, null, new { @class = "text-danger" }) 

這是我在EventController方法:

public ActionResult GetHearingsForJudgePanel(string id, int? month = null, int? year = null, int? caseNumber = null, int? caseYear = null) 
{ 
    if (!Request.IsAjaxRequest()) 
     return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 

     int currentMonth; 
     int currentYear; 
     DateTime currentDate = DateTime.Now; 
     EventService service = new EventService(); 
     IEnumerable<object> data; 

     if (id == "") 
     { 
      id = null; 
     } 

     string judgePanel = id; 

     if (month.HasValue) 
      currentMonth = month.Value; 
     else 
      currentMonth = currentDate.Month; 

     if (year.HasValue) 
      currentYear = year.Value; 
     else 
      currentYear = currentDate.Year; 

      data = service.GetHearingsForJudgePanel(judgePanel, currentMonth, currentYear, caseNumber, caseYear); 

      return Json(data, JsonRequestBehavior.AllowGet); 
} 

直到昨天在視圖中的代碼爲:

<div class="col-md-3"> 
    @Html.DropDownListFor(x => x.id, Model.JudgePanels, "all", new { id = "juror-id", @class = "form-control" })   
</div> 

因爲我有選項「全部」顯示所有的判斷面板。現在,我必須刪除該選項,並且只想保留下列單詞:在下拉列表頂部選擇「一個判斷面板」,並且當有人選擇它時顯示驗證消息「該字段是必需的」,以便提示用戶選擇一個特定的法官面板,併爲了使下拉所需(不能沒有它過濾)。

問題是,當我選擇「選擇一個判斷面板」和篩選而不是接收驗證消息時,我再次看到所有聽證會(針對所有裁判面板)。我調試了控制器方法,當我從下拉列表中選擇「選擇一個判斷面板」時,我看到id(judgePanel)參數是空字符串(「」)。

請幫我收到正常的驗證信息。

這裏是我已經把在我看來,我的JavaScript文件:

$("#juror-id").chosen(); 
+0

您能向我們展示如何將數據填充到JudgePanels? – Win

+0

假設您啓用了客戶端驗證,您顯示的代碼將顯示一條錯誤消息(但是由於您進行ajax調用,您還需要首先測試$('form').valid()')。顯示你的腳本和你用來觸發ajax調用的html元素! –

+0

斯蒂芬Muecke,我已經顯示的代碼不會給出錯誤。問題是,當我從「judgePanel」(這是一個List )的下拉列表中選擇「選擇一個judgePanel」時,控制器方法中的「id」(judgePanel)參數是一個空字符串。這個空變成了如方法中所示的「null」,並且當該空值傳遞給此方法service.GetHearingsForJudgePanel()時,此方法返回所有判斷面板的所有聽覺。我希望從下拉列表中選擇「選擇一個判斷面板」選項時收到驗證消息,但我不知道如何實現它。 – ppetyr

回答

0

你可以使用JavaScript/jQuery來進行確認提交之前,如果該值是空字符串觸發驗證,如果此值ActionResult返回一個值並使用它來顯示你需要的驗證

0

試着改變你的模型到這個?

[Required] 
[RegularExpression(@"[^\s]+", ErrorMessage = "*")] 
public string id { get; set; } 
+0

我試過你的建議,但結果是一樣的 – ppetyr