尝试在创建页面MVC 5上创建案例和人员

本文关键字:创建 案例 MVC | 更新日期: 2023-09-27 18:25:03

我用以下代码创建了一个"创建"页面。我知道这不是最好的做法,但我不确定如何做到这一点。这是代码:

[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; }
}

尝试在创建页面MVC 5上创建案例和人员

我能够让它按照我想要的方式工作。这是最后的代码:

[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);
}

感谢大家的帮助!:)