Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# jquery使用引导选择器在@Html.DropDownListFor上验证_C#_Asp.net Mvc 4_Jquery Validate_Unobtrusive Validation - Fatal编程技术网

C# jquery使用引导选择器在@Html.DropDownListFor上验证

C# jquery使用引导选择器在@Html.DropDownListFor上验证,c#,asp.net-mvc-4,jquery-validate,unobtrusive-validation,C#,Asp.net Mvc 4,Jquery Validate,Unobtrusive Validation,我有一个表单,其中有两个控件。一个select控件,该控件已使用bootstrap selectpicker和一个文本框自定义,它们是强类型,具有视图模型。下面是项目结构的详细信息,这里是,验证使用 SampleViewModel.cs public class SampleViewModel { [Required(ErrorMessage="Please Select a Role")] //Not sure whether Required has to b

我有一个
表单
,其中有两个控件。一个
select
控件,该控件已使用
bootstrap selectpicker
和一个
文本框
自定义,它们是
强类型
,具有
视图模型
。下面是项目结构的详细信息,这里是,验证使用

SampleViewModel.cs

public class SampleViewModel
{
        [Required(ErrorMessage="Please Select a Role")]
        //Not sure whether Required has to be assigned to RoleId or Roles
        public int RoleId { get; set; }
        public SelectList Roles { get; set; }
        [Required(ErrorMessage="Please Enter a name")]
        public string name{get;set;}
}
查看

<div class="container">
    <div class="col-md-6 col-md-offset-3">
        <h1>Hello Stranger</h1>
            @using (Html.BeginForm("", "", FormMethod.Post, 
                             new { enctype = "multipart/form-data", id="frmSample" }))
            {
                <div class="form-group">
                    @Html.DropDownListFor(m => m.RoleId, Model.Roles, "Please Select your Country", new{@class="selectpicker"})
                    @Html.ValidationMessageFor(m=>m.RoleId)
                </div>
                <div class="form-group">
                    @Html.TextBoxFor(m => m.name, null, new{@class="form-control"}) 
                    @Html.ValidationMessageFor(m=>m.name)
                </div>
                <button type="button" class="btn btn-success submit">Ask</button>
            }
            <br/><br/>
        </div>
</div>
JS

$(document).ready(function(){
    $('.selectpicker').selectpicker();
    $("#frmSample").validate({
        onfocusout: true
    });
});
$('.submit').on('click',function(){
    if($("#frmSample").valid())
        alert(true);
});
问题

  • 我所面临的问题是我的
    下拉列表
    元素没有显示 使用
    jquery验证进行验证
    ,而我的
    文本框
    得到 验证。问题可能是我初始化的方式或 将
    Required
    属性分配给特定的
    型号
    属性,我不确定要为哪个属性分配所需的
    属性
  • 我已经给出了
    onfocusout:true
    来验证focusout,但除非 在
    文本框中键入内容,然后删除内容
    验证没有发生

非常感谢您的帮助。

您的jquery插件隐藏了
DropDownListFor()
方法生成的
元素(
display:none;
),并添加了自己的html。默认情况下,
jquery.validate.js
不会验证隐藏的输入,因此需要使用

$.validator.setDefaults({ 
  ignore: []
});
注意,这将验证所有隐藏的输入,因此要验证这一输入,您可以使用
ignore::hidden:not('#RoleId')”

此外,您还有其他错误。您的
RoleId
属性的类型为
int
,但您的
SelectList
将生成值为
字符串的选项(“Admin”和“Manager”),并且不能绑定到
int
。将属性更改为
string RoleId
,或者创建一个
SelectList
,其值的类型为
int
。例如,如果您有一个
Roles
表,其中包含字段
int-ID
string-Name
,则

var roles = db.Roles();
model.Roles = new SelectList(roles, "ID", "Name");


请参阅

.selectpicker()
我假设是一个jquery插件,它将隐藏
元素并用自己的html替换它。您需要修改验证器来验证隐藏的输入(默认情况下不是)。而且
[必需的]
属性在
RoleId
属性:)上是正确的,总是有一个很好的回复@StephenMuecke,我期待着……)但根据我的研究,我需要在验证时根据设置
忽略:[]
,但这仍然没有帮助..:(这应该可以正常工作,但是您的演示程序有
@Html.ValidationMessageFor(m=>m.Roles)
-它应该是
RoleId
我必须证明它可以工作:)已更新了。需要短暂休息,所以稍后将添加答案。
var roles = db.Roles();
model.Roles = new SelectList(roles, "ID", "Name");
model.Roles = roles.Select(r => new SelectListItem()
{
  Value = r.ID.ToString(),
  Text = r.Name
};