Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.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# DropDownList验证-ModelState.IsValid始终为false_C#_Asp.net_Asp.net Mvc_Asp.net Mvc 2_Drop Down Menu - Fatal编程技术网

C# DropDownList验证-ModelState.IsValid始终为false

C# DropDownList验证-ModelState.IsValid始终为false,c#,asp.net,asp.net-mvc,asp.net-mvc-2,drop-down-menu,C#,Asp.net,Asp.net Mvc,Asp.net Mvc 2,Drop Down Menu,我尝试创建一个asp.NETMVC2应用程序。 我的下拉列表不会被验证 我有一个名为Animal的核心模型类,它有一些属性,类属也是这样。这些类被映射到nHibernate namespace Core.Models { public class Animal { public Animal() { } public virtual int AnimalId { get; set; } [DisplayName("Name")

我尝试创建一个asp.NETMVC2应用程序。 我的下拉列表不会被验证

我有一个名为Animal的核心模型类,它有一些属性,类属也是这样。这些类被映射到nHibernate


namespace Core.Models
{
    public class Animal
    {
        public Animal() { }

        public virtual int AnimalId { get; set; }

        [DisplayName("Name")]
        [Required(AllowEmptyStrings = false, ErrorMessage = "Name is required")]
        public virtual string Name { get; set; }

        [DisplayName("Gattung")]
        [Required(ErrorMessage = "Genus is required")]
        public virtual Genus Genus { get; set; }
    }
}
namespace Core.Models
{
    public class Genus
    {
        public Genus() { }

        public virtual int GenusId { get; set; }

        [DisplayName("Name")]
        public virtual string GenusTitle { get; set; }
    }
}
在我的UI项目中,我有一个名为AnimalViewModel的ViewModel类


   public class AnimalViewModel
   {
        public Animal Animal { get; set; }
        public string ReturnUrl { get; set; }

        public IList Genus { get; set; }

        public AnimalViewModel(Animal a, string returnUrl)
        {
            this.Animal = a;
            this.ReturnUrl = returnUrl;            
        }

        public AnimalViewModel() { }
    }
以下是我的看法:


 model.Animal.Genus, new SelectList(Model.Genus, "GenusId", "GenusTitle"), "-- Fill out --")%>
最后是我的控制器:


        public ActionResult Index(string returnUrl)
        {
            AnimalViewModel avm = new AnimalViewModel()
            {
                Animal = new Animal(),
                ReturnUrl = returnUrl,
                Genus = GenusRepository().GetAll()
            };
            return View(avm);
        }
        [HttpPost]
        public ActionResult Index(AnimalViewModel avm)
        {
            if (ModelState.IsValid) //is always false
            {
                //save
                return RedirectToAction("Overview");
            }
            else
            {
                Genus = GenusRepository().GetAll();
                return View(avm);
            }
        }
ModelState.IsValid始终为false。我不知道怎么了。 客户端验证有效,但服务器验证无效

任何帮助都将不胜感激


谢谢

您没有正确使用
DropDownListFor
帮助程序。第一个参数表示一个属性,该属性将保存选定的值,并且必须是标量类型。在本例中,您传递的是一个集合,与用作第二个参数的集合相同。所以它应该是这样的:

<%: Html.DropDownListFor(
    model => model.Animal.Genus.GenusId, 
    new SelectList(Model.Genus, "GenusId", "GenusTitle"), 
    "-- Fill out --"
)%>
public class AnimalViewModel
{
    [DisplayName("Name")]
    [Required(AllowEmptyStrings = false, ErrorMessage = "Name is required")]
    public string AnimalName { get; set; }

    [DisplayName("Gattung")]
    [Required(ErrorMessage = "Genus is required")]    
    public int? SelectedGenusId { get; set; } 

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