2016-11-23 90 views
0

我有一個Viewbag一個下拉列表,我需要對其進行驗證,如 「必需」驗證所需的非型號MVC DROPDOWNLIST

我的控制器

public ActionResult EsperaPorHora() 
     { 
      var cliente = new UsuarioData().Id_LicenciadoPorId(User.Identity.GetUserId()); 
      var Cli = !string.IsNullOrEmpty(cliente.ToString()) ? Convert.ToInt32(cliente) : 0; 
      var cliData = new LicenciadoData(); 
      var agora = DateTime.Now; 
      ViewBag.Data1 = agora.ToShortDateString(); 
      ViewBag.Data2 = agora.ToShortDateString(); 

      if (Cli != 0) 
      { 
       ViewBag.IdCliente = new SelectList(cliData.ListaClienteId(Cli), "Id", "Fantasia"); 
      } 
      else 
      { 
       ViewBag.IdCliente = new SelectList(cliData.ListarClientes(), "Id", "Fantasia"); 
      }   
      return View(); 
     } 

     [HttpGet] 
     public JsonResult EsperaHora(string data1, string data2, int? cliente) 
     { 
      var voiceData = new KiperVoiceData(cliente); 
      var media = voiceData.GetEsperaData(data1, data2); 
      var atend = voiceData.GetEsperaHora(data1, data2); 

      var result = new { atend, media }; 
      return Json(result, JsonRequestBehavior.AllowGet); 
     } 

我想:

@Html.DropDownList("IdCliente", null, "SELECIONE A EMPRESA", htmlAttributes: new { @class = "form-control combo2", @required = "required" })        

@Html.DropDownList("IdCliente", null, "SELECIONE A EMPRESA", htmlAttributes: new { @class = "form-control combo2", @required = true })        

@Html.DropDownList("IdCliente", null, "SELECIONE A EMPRESA", htmlAttributes: new { @class = "form-control combo2", required = true }) 

但沒有人工作給我,如果我點擊按鈕沒有選擇它運行到一個例外。什麼即時做錯了?

+1

如果你不綁定到你不能得到驗證一個模型!。你需要綁定到一個模型屬性(帶有[[Required]'屬性,並且'SelectList'的名字不能和你綁定的屬性名稱相同。然後POST方法中的參數需要是模型 –

+0

我的下拉列表是從列表中填充的,我如何將它綁定到模型?newbie here ...我可以做一個js驗證嗎? –

+0

'@ Html.DropDownListFor(m> m.PropertyToBindTo,Model.YouSelectList ,「SELECIONE A EMPRESA」,新的{@class =「form-control combo2」})' –

回答

1

發送需要爲這樣的類:

更新

使用與optionlabel過載。我在這裏通過「選擇」,但你可以傳遞你需要的任何東西。還要提供驗證摘要以通知用戶它是必填字段。

@Html.ValidationSummary() 
@Html.DropDownList("name", new List<SelectListItem> { new SelectListItem { Text = "1", Value = "2" } }, "choose", htmlAttributes: new { @class = "form-control combo2 required", @data_val = "true", @data_val_required = "choose is a required field" })      
+0

我按照你的建議試過了,但是它不起作用,如果我點擊按鈕POST,它運行到一個異常,因爲變量是NULL,我認爲最好的解決方案是在JS上驗證null,我會盡力並會在稍後告訴你。 –

+0

它確實有效。複製和粘貼我的代碼,你會看到它的工作原理。代碼是diffdrent,我認爲。 – CodingYoshi

+0

我只是將它複製並粘貼到我的項目中,我認爲它會起作用,並且您的下拉列表不會運行到異常。我會嘗試從我的viewbag中獲取選擇列表並創建驗證。謝謝!你有沒有看到我找到的解決方案? –

0

解決html和剃鬚刀的問題很重要,主要是爲了提高我的知識。正如我上面說,我能找到使用的JS解決方案和一個名爲甜警報如下組件:

var data1 = $('#data1').val(); 
var data2 = $('#data2').val(); 
var cliente = $('#IdCliente option:selected').val(); 

if (cliente != "") { 

      $.ajax({ 
       url: '', 
       dataType: "json", 
       type: "GET", 
       data: { 'data1': data1, 'data2': data2, 'cliente': cliente }, 
       success: function (data) { 
        } 
       }, 

       error: function (xhr) { 
        alert('error'); 
       } 
      }); 
     } 
     else { 
      swal({ type: "warning", title: "Alerta", text: "Selecione uma empresa por favor!", timer: 5000, showConfirmButton: true }); 
     } 

這是結果:

Alert Sweet

+0

這個解決方案很好,但在網絡世界中很少這樣做。在網絡世界中,錯誤顯示在必填字段旁邊和/或摘要顯示在表單頂部。例如,如果您在登錄或創建帳戶時沒有填寫字段,則在登錄時在stackoverlow,gmail和大多數其他站點上,它不會顯示對話框。另外,如果您的網站是通過智能手機訪問的,那麼看到警報會更加尷尬。 – CodingYoshi