我用以下代码创建了一个"创建"页面。我知道这不是最好的做法,但我不确定如何做到这一点。这是代码:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,Victim")] Case @case, Person person)
{
var caseVictims = @case.Victim;
db.Cases.Add(@case);
db.SaveChanges();
var caseId = @case.ID; //need this
if (caseVictims != null && caseVictims != "")
{
if (caseVictims.Contains(";"))
{ // { "First1,Last1;First2,Last2" }
string[] victims = caseVictims.Split(';');
foreach (var victim in victims)
{
person.CaseId = caseId;
person.Victim = true;
person.FullName = victim;
person.Case = null;
db.People.Add(person);
db.SaveChanges();
}
}
else
{
person.CaseId = caseId;
person.Victim = true;
person.FullName = caseVictims;
person.Case = null;
db.People.Add(person);
db.SaveChanges();
}
return RedirectToAction("Index");
}
return View(@case);
}
我希望能够创建一个案例,并使用该案例中的信息(如@case.Victim
)来填充"人员"表。现在它工作正常,只是每次我点击提交时都会创建两个"案例"。无论我有多少"受害者",情况都是如此。如果我评论掉"受害者"部分,它只会像预期的那样造成一个案件。谢谢你的帮助!
编辑:以下是的型号
public partial class Person
{
public int ID { get; set; }
public int CaseId { get; set; }
public Nullable<bool> Victim { get; set; }
public string FullName { get; set; }
public virtual Case Case { get; set; }
}
public partial class Case
{
public int ID { get; set; }
public string Victim { get; set; }
public virtual ICollection<Person> People { get; set; }
}
我能够让它按照我想要的方式工作。这是最后的代码:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "ID,Victim")] Case @case, Case lastCase, Person person)
{
var caseVictims = @case.Victim;
lastCase = @case;
db.Cases.Add(@case);
db.SaveChanges();
var caseId = @case.ID; //need this
if (caseVictims != null && caseVictims != "")
{
if (caseVictims.Contains(";"))
{ // { "First1,Last1;First2,Last2" }
string[] victims = caseVictims.Split(';');
foreach (var victim in victims)
{
person.CaseId = caseId;
person.Victim = true;
person.FullName = victim;
person.Case = lastCase;
db.People.Add(person);
db.SaveChanges();
}
}
else
{
person.CaseId = caseId;
person.Victim = true;
person.FullName = caseVictims;
person.Case = lastCase;
db.People.Add(person);
db.SaveChanges();
}
return RedirectToAction("Index");
}
return View(@case);
}
感谢大家的帮助!:)