MVC3 - Controller-methode om modelgegevens te creëren en te associëren met richtlijnen van een andere tabel/model

Ik heb 2 modellen, elk met veel eigenschappen - Object1 en Object2

Ik heb een buitenlandse sleutelrelatie met hen in SQL db - Object1 kan veel Object2's hebben

Bij het maken van Object2 in de Create() -methode van Object2Controller, hoe zou ik Object2 aan Object 1's Guid koppelen?

Hier is code:

controller:

    [HttpPost]
public ActionResult Create(Object2 object2)
    {
        if (ModelState.IsValid)
        {
            object2.Object2Id = Guid.NewGuid();
            db.Object2.Add(object2);
            db.SaveChanges();
            return RedirectToAction("Index");  
        }
        return View(object2);
    }
0

1 antwoord

Ik zie alleen twee opties in dit scenario:

  1. Vult de Object1 GUID vooraf in het model in, wanneer u deze vanuit de weergave weer publiceert, net als de andere eigenschappen. Dit kan op verschillende manieren worden gedaan, afhankelijk van uw vereisten (door de gebruiker geselecteerde vervolgkeuzelijst, vooraf ingevuld in een verborgen veld, enzovoort).
  2. Houd de server bij waarvan Object1 de huidige gebruiker aan het werken is. U kunt dit doen met het object Sessie of zelfs met behulp van TempData .

Bewerken

Ga als volgt te werk om een ​​nieuwe Object2 in de detailweergave Object1 te maken.

Eerst een eenvoudig formulier in de detailweergave:

@using (var form = Html.BeginForm("Add", "Object2Controller", FormMethod.Get)) 
{ 
    <input type='hidden' name='Object1ID' value='@Model.Object1ID' />
    
}

Dan hebt u een Add -methode in de controller voor Object2 die de foreign key vooraf invult:

[HttpGet]
public ActionResult Add(Guid Object1ID)
{
    Object2 newObj = new Object2();
    newObj.Object1ID = Object1ID;
    return View("MyAddView", newObj);
}

Dit zou verwijzen naar het Object2 detailformulier, dat terugkomt naar de Create -methode in uw vraag.

1
toegevoegd
@HelloJonnyOh Ik heb wat details toegevoegd aan mijn antwoord voor dat scenario, controleer dan mijn update.
toegevoegd de auteur McGarnagle, de bron
@MyAddView dat zou uw bestaande weergave zijn die wordt gebruikt voor het toevoegen van een nieuwe Object2 (in dit geval neem ik aan dat u het Object2 -model zelf gebruikt als het weergavemodel).
toegevoegd de auteur McGarnagle, de bron
Idealiter op de detailweergave van Object1 wil ik een actieknop waarop de gebruiker kan klikken om Object2 te maken. Daar moet dus een associatie van gemaakt worden. Mogelijk dat stap 1 een deel van dit zou kunnen bereiken? Kunt u mij verwijzen naar voorbeelden op internet of naar uw ervaring?
toegevoegd de auteur J0NNY ZER0, de bron
Wat zou ik voor MyAddView plaatsen? Ik heb het meestal op zijn plaats en klaar om te testen ...
toegevoegd de auteur J0NNY ZER0, de bron
Als mijn eerste weergave @ Html.HiddenFor (Model => Model.Object1Id) heeft en de link in mijn eerste weergave wordt gegenereerd met @ Html.ActionLink ("Maken", "Maken", "Object1", nieuw {area = "Gebied1 "}), hoe kon ik de Object1Id dan beschikbaar maken zodat de Create() -methode in mijn Object2-controller toegang heeft tot Object1Id?
toegevoegd de auteur J0NNY ZER0, de bron