C# DropDownList验证-ModelState.IsValid始终为false
我尝试创建一个asp.NETMVC2应用程序。 我的下拉列表不会被验证 我有一个名为Animal的核心模型类,它有一些属性,类属也是这样。这些类被映射到nHibernateC# 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")
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; }
}