【发布时间】:2011-04-19 15:50:50
【问题描述】:
所以我有 2 个模型:人员和成分,我想要完成的事情是任何人都可以选择一种成分(通过 jQuery 自动完成),输入他们的数据,然后在创建时将其保存到数据库中。
所以应该是这样的:
public class Person {
public int PersonID { get; set; }
[Required(ErrorMessage="Given name is a required field")]
[DisplayName("Given name")]
public string GivenName { get; set; }
[Required(ErrorMessage="Family name is a required field")]
[DisplayName("Family name")]
public string FamilyName { get; set; }
[Required(ErrorMessage = "Birthdate is a required field")]
[DisplayFormat(DataFormatString = "{0:d}")]
public DateTime Birthdate { get; set; }
[DisplayName("Ingredient")]
public virtual Ingredient Ingredient { get; set; }
}
还有:
public class Ingredient {
public int IngredientID { get; set; }
[Required(ErrorMessage = "Ingredient is a required field")]
[Remote("IngredientExists", "Person")]
public string Name { get; set; }
public virtual ICollection<Person> Persons { get; set; }
}
现在我的视图目前看起来像这样: (sn-p 只是成分部分)
<div class="editor-label">
@Html.LabelFor(model => model.Ingredient)
</div>
<div id="ingredients-list" class="editor-field">
@Html.EditorFor(model => model.Ingredient.Name)
@Html.ValidationMessageFor(model => model.Ingredient.Name)
@ViewBag.IngredientError
</div>
控制器:
//
// POST: /Person/Create
[HttpPost]
public ActionResult Create(Person person) {
if (ModelState.IsValid) {
db.People.Add(person);
db.SaveChanges();
return RedirectToAction("Index");
}
person.Ingredient.Name = "";
return View(person);
}
现在这一切都有效,除了 1 件事(一个有点大的问题),当我从下拉列表中选择一种成分时,它会保存这个人并在数据库中创建一个新的成分,具有新的 ID 和与那个相同的值选择(即:重复)。 现在,我对 EF 和 LINQ 还很陌生,所以我还没有弄清楚如何去做。任何想法/解决方案将不胜感激!
【问题讨论】:
-
顺便说一句。类似的问题被问了 100 次,所以请尝试使用搜索。
标签: c# .net asp.net asp.net-mvc-3 entity-framework-4.1