C# MVC 4/5添加静态下拉列表以注册验证

C# MVC 4/5添加静态下拉列表以注册验证,c#,asp.net-mvc-4,drop-down-menu,model,C#,Asp.net Mvc 4,Drop Down Menu,Model,在注册页面上,我为vdab学生添加了一个下拉列表:是/否,但viewmodel中描述的验证不起作用(我想这是因为我使用了ViewBag而不是model?) 有人可以帮我创建下拉列表,这样我就可以使用这种方式: @Html.DropDownFor(x => x.Something, Model.Something, "Select a component type" ) 这就是我所拥有的: 识别模型 public class ApplicationUser : IdentityUser {

在注册页面上,我为vdab学生添加了一个下拉列表:是/否,但viewmodel中描述的验证不起作用(我想这是因为我使用了ViewBag而不是model?)

有人可以帮我创建下拉列表,这样我就可以使用这种方式:

@Html.DropDownFor(x => x.Something, Model.Something, "Select a component type" )
这就是我所拥有的:

识别模型

public class ApplicationUser : IdentityUser
{

    public virtual Person Person { get; set; }

}

public class Person
{
    public virtual Klas Klas { get; set; }
    public int Id { get; set; }
    public string Voornaam { get; set; }
    public string Familienaam { get; set; }
    public bool Vdab { get; set; }
}
public class Klas
{
    public int Id { get; set; }
    public string Omschrijving { get; set; }

}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("ConnectionString")
    {
    }
}
在accountcontroller中:

      [AllowAnonymous]
    public ActionResult Register()
    {
        var Vdab = new SelectList(new[] { new { ID = "1", Name = "Ja" }, new { ID = "0", Name = "Nee" }, }, "ID", "Name", 1);
        ViewBag.Vdab = Vdab;
        return View();
    }
[AllowAnonymous]
public ActionResult Register()
{
    RegisterViewModel viewModel = new RegisterViewModel();
    viewModel.VdabSelectList = new[]
        {
            new SelectListItem { Value = bool.TrueString, Text = "Ja" },
            new SelectListItem { Value = bool.FalseString, Text = "Nee" }
        }
    return View(viewModel);
}

[HttpPost]
public ActionResult Register(RegisterViewModel _viewModel)
{
    //Do stuff with form data...
}
最后,我用razor在视图中显示下拉列表

     <div class="form-group">
             @Html.LabelFor(m => m.Vdab, new { @class = "col-md-2 control-label" })
             <div class="col-md-10">

                 @Html.DropDownList("Vdab", @ViewBag.Vdab as SelectList, "----Maak een keuze ----")
             </div>
         </div>

@LabelFor(m=>m.Vdab,新的{@class=“col-md-2控制标签”})
@Html.DropDownList(“Vdab”,@ViewBag.Vdab作为SelectList,”----Maak een keuze----”)

将此添加到RegisterViewModelClass:

public IEnumerable<SelectListItem> VdabSelectList { get; set; }
最后,将其添加到视图中:

 <div class="form-group">
     @Html.LabelFor(m => m.Vdab, new { @class = "col-md-2 control-label" })
     <div class="col-md-10">
         @Html.DropDownListFor(m => m.vDab, new SelectList(m.VdabSelectList, "Value", "Text"))
     </div>
 </div>
您可以使用:

 @Html.DropDownList("Vdab", @ViewBag.Vdab as SelectList, "----Maak een keuze ----")
仅在控制器中,您可以执行以下操作:

   [AllowAnonymous]
public ActionResult Register()
{
   List<SelectListItem> myList =new List<SelectListItem>();
   myList.Add(new SelectListItem { Value = bool.TrueString, Text = "Ja" });
   myList.Add(new SelectListItem { Value = bool.FalseString, Text = "Nee" });

    var Vdab = new SelectList(myList,"Value","Text");

    ViewBag.Vdab = Vdab;
    return View();
}
[AllowAnonymous]
公众行动结果登记册()
{
List myList=新列表();
添加(新的SelectListItem{Value=bool.TrueString,Text=“Ja”});
添加(新的SelectListItem{Value=bool.false字符串,Text=“Nee”});
var Vdab=新的选择列表(myList,“值”、“文本”);
ViewBag.Vdab=Vdab;
返回视图();
}

您的问题很简单,您已经指定您的模型类型为bool。Bool是一种值类型,总是包含一个值,因此无论发生什么情况,验证都不会失败。它始终至少包含默认值,即false

您希望使类型为空

[Required]      
[Display(Name = "Vdab Student")]
public bool? Vdab { get; set; }
现在,您所需的验证将正常工作,您的原始(和正确的)Html助手也将正常工作

@Html.DropDownFor(x => x.Something, Model.SomethingList, "Select a component type" )

不过,还是要提醒一下。。将列表更改为Model.SomethigList,对所选项目和列表使用相同的名称可能会导致很多问题。

执行此操作时,我在下拉列表中看到system.web.mvc.SelectlistItem 2次。应该是“是/否”,您能帮我吗?我已使用另一个签名
SelectList
。错误1“System.Collections.Generic.IEnumerable”不包含“Add”的定义,并且找不到接受“System.Collections.Generic.IEnumerable”类型第一个参数的扩展方法“Add”(您缺少using指令或程序集引用吗?)如果您的类中没有调用引用或程序集,请更改为
List
对不起,我不确定在哪里更改为List?viewModel.VdabSelectList=new[]{new SelectListItem{Value=bool.TrueString,Text=“Ja”},new SelectListItem{Value=bool.false字符串,Text=“Nee”};我在new[]上遇到错误,无法隐式转换类型'System.web.Mvc.SelectListItem[]要访问system.collections.generic.IEnumerabley,您需要system.Web.MVC.SelectListItem。只需在声明VdabSelectList或调整命名空间时直接指定它。可以使用命名空间别名。
[Required]      
[Display(Name = "Vdab Student")]
public bool? Vdab { get; set; }
@Html.DropDownFor(x => x.Something, Model.SomethingList, "Select a component type" )