2016-11-23 68 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