jQuery Chosen Dropdown validation client site doesn't work

扶醉桌前 提交于 2019-11-26 11:40:32

问题


My model class contains of required lookup value which is a lookup-based record:

[Required]
[DisplayName(\"Business Unit\")]
public string value { get; set; }

[Required] //not working on client side?
[DisplayName(\"Business Group\")]
public int id_businessgroup { get; set; }

View:

    <div class=\"editor-label\">
        @Html.LabelFor(model => model.value)
    </div>
    <div class=\"editor-field\">
        @Html.EditorFor(model => model.value)
        @Html.ValidationMessageFor(model => model.value)
    </div>

    <div class=\"editor-label\">
        @Html.LabelFor(x=>x.BusinessGroup.value)
    </div>
    <div class=\"editor-field\">
        @Html.DropDownListFor(x => x.id_businessgroup, new SelectList(ViewBag.BusinessGroups,\"id\",\"value\"),\"Please select group from list...\")
        @Html.ValidationMessageFor(x => x.id_businessgroup)
    </div>

@section scripts{
  @Html.Partial(\"ScriptUseChosen\")
}

Controller:

public ActionResult Create()
    {
        ViewBag.BusinessGroups = DB.BusinessGroups.Where(x => x.is_active).OrderBy(x => x.value).ToList();
        return View();
    }

Web.config:

<add key=\"ClientValidationEnabled\" value=\"true\" />
<add key=\"UnobtrusiveJavaScriptEnabled\" value=\"true\" />

BundleConfig.cs:

            bundles.Add(new ScriptBundle(\"~/bundles/jqueryval\").Include(
            \"~/Scripts/jquery.validate*\",
            \"~/Scripts/jquery.unobtrusive*\"));

Validation for value is working perfectly on client side, but it\'s not working on the Chosen\'s dropdown. What could be the reason?


回答1:


jQuery Chosen updates the html by making the original select hidden (style="Display:none"). By default jquery.validate (1.9.0) ignores hidden elements. You can override the default using

$.validator.setDefaults({ 
  ignore: []
});

or

$('form').validate({
    ignore: []
});



回答2:


Make sure the option label is not rendered as Please select group from list... in your dropdown, then it will be regarded as a selected value by default and the client side validation will pass.

Instead of using ViewBag for databinding try changing your model like below and i tested it's working fine,

    [Required]
    [DisplayName("Business Unit")]
    public string value { get; set; }

    [Required] //not working on client side?
    [DisplayName("Business Group")]
    public int id_businessgroup { get; set; }

    public IEnumerable<SelectListItem> BussinessGroup { get; set; } 

And bind the data to the BussinessGroup in controller like,

            BussinessGroup = new List<SelectListItem>
            {
                new SelectListItem
                {
                    Text = "A",
                    Value = "1"
                },

                    new SelectListItem
                {
                    Text = "B",
                    Value = "2"
                }
            }

Finally in the view bind the dropdown as,

    @Html.DropDownListFor(x=>x.id_businessgroup, Model.BussinessGroup, "Please select group from list...")
    @Html.ValidationMessageFor(x=>x.id_businessgroup)



回答3:


I've found a quick workaround for that by using jquery's Select2 plugin. I'm leaving this question opened for solution using Chosen.



来源:https://stackoverflow.com/questions/26379307/jquery-chosen-dropdown-validation-client-site-doesnt-work

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!