0

常に同じプロジェクトで (私に回答した人のために)、私はエンティティ VehicleFuelCard (関係 1 対多) と関係しているエンティティ "Person" を持っています。私の「Create Person」ビューには、実際には「Create Fuel Card」ビューである部分ビューを AJAX コードで含めました。

<script type = "text/javascript">
function AddVehicleFuelCard() {
    $("#test").load("@Url.Action("AddVehicleFuelCard","Person", 
        new { personViewModel = Model })");
}
</script>

そしてそれを PersonController で呼び出します:

public ActionResult AddVehicleFuelCard(PersonViewModel personViewModel)
{
    ViewBag.Id_VehicleFuelCardCompany = new SelectList(db.VehicleFuelCardCompanies, "Id_VehicleFuelCardCompany", "Name");

    return PartialView("PartialVehicleFuelCard", personViewModel);
}

私が使用するViewModelは次のとおりです。

public class PersonViewModel
{
    private Person _person;
    public List<VehicleFuelCard> listVehicleFuelCard;
    public Person Person
    {
        get
        {
            return this._person;
        }    
    }

    public PersonViewModel()
    {
        this._person = new Person();
    }

    public PersonViewModel(Person person)
    {
        this._person = person;
    }

    public VehicleFuelCard NewVehicleFuelCard
    {
        get
        {
            VehicleFuelCard element = new VehicleFuelCard();
            element.Person = this.Person;
            Person.VehicleFuelCards.Add(element);

            return element;
        }
    }

    public PhoneCard NewPhoneCard
    {
        get
        {
            PhoneCard element = new PhoneCard();
            Person.PhoneCards.Add(element);

            return element;
        }
    }

    public ProductAllocation NewProductAllocation
    {
        get
        {
            ProductAllocation element = new ProductAllocation();
            Person.ProductAllocations.Add(element);

            return element;
        }
    }
}

そして、コントローラーのアクションの作成:

public ActionResult Create()
{
    ViewBag.Id_ProductPackageCategory = new SelectList(db.ProductPackageCategories, "Id_ProductPackageCategory", "Name");
    return View();
}

//
// POST: /Person/Create

[HttpPost]
public ActionResult Create(PersonViewModel personViewModel)
{ 
    if (ModelState.IsValid)
    {
        db.Persons.AddObject(personViewModel.Person);
        db.SaveChanges();

        return RedirectToAction("Index");
    }

    ViewBag.Id_ProductPackageCategory = new SelectList(db.ProductPackageCategories, "Id_ProductPackageCategory", "Name", personViewModel.Person.Id_ProductPackageCategory);

    return View(personViewModel);
}

人を追加している間に燃料カードを追加するアイデアはありますか? ありがとう !

4

1 に答える 1

0

Person両方の投稿を同じリクエストで投稿したい場合Fuel Cardは、クライアント側でデータを更新して、Fuel Cardリクエストの一部として含める必要があります。

これはクライアント側であり、サーバー側でFuel Cardはネストされたオブジェクトとして追加できますPerson(ただし、クライアントにシリアル化するときは循環参照に注意してください)。

これが大まかな例です。クライアント側のオブジェクトを更新して、 と の両方を含めPersonViewModelますFuel Card。たとえば、JavaScript でオブジェクトを作成します。

var person={firstname:"John",lastname:"Doe",age:50,eyecolor:"blue"};

ネストされたオブジェクトを追加する

person.FuelCard = {property1 ="val1", property2="Val2};

次に、Ajax を使用してサーバーに投稿します。

$.post('/Person/Create', person, function(data) {
   // do something on success
 });
于 2013-03-04T15:13:36.623 に答える