我尝试添加一个新的国家,该国有一个链接到大陆。当我按下“创建”按钮时,它不会添加新记录。我调试了我的项目,我认为这是因为ValidState是错误的。因为这个原因,属性“Continent”为空,但Continent_Id不是。 我尝试编辑现有国家时遇到同样的问题。 (我已经使用SQL Management Studio中的SQL脚本填充了我的数据库)MVC4:创建新记录时Modelstate无效
有人可以帮助我吗?
洲类:
public class Continent
{
public int Id { get; set; }
[Required, MaxLength(25)]
public string Name { get; set; }
//Navigation
public virtual List<Country> Countries { get; set; }
}
国家类
public class Country
{
public int Id { get; set; }
[Required, MaxLength(25)]
public string Name { get; set; }
[MaxLength(5)]
public string Abbreviation { get; set; }
public int Continent_Id { get; set; }
//Navigation
[Required, ForeignKey("Continent_Id")]
public virtual Continent Continent { get; set; }
}
Controller类(创建函数)
//
// GET: /Countries/Create
public ActionResult Create()
{
ViewBag.Continent_Id = new SelectList(db.Continents, "Id", "Name");
return View();
}
//
// POST: /Countries/Create
[HttpPost]
public ActionResult Create(Country country)
{
var errors = ModelState.Values.SelectMany(v => v.Errors); //to check the errors
if (ModelState.IsValid)
{
db.Countries.Add(country);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.Continent_Id = new SelectList(db.Continents, "Id", "Name", country.Continent_Id);
return View(country);
您能否请求给出选项3(最佳选项)的更多信息。 –
我认为@Jan有覆盖选项3。从本质上讲,你应该让应用程序的每一层处理一个对他们有意义的模型。因此,您的域模型是Country,它具有数据存储所需的所有字段等。但是,在Web层中,您的表单没有所有这些信息,因此您需要创建一个CountryViewModel,这对您所拥有的数据有意义,必要时在两者之间进行转换。 – rpmcnally