2013-03-04 62 views
0

总是在同一个项目上(对于那些回答我的人),我有一个与实体VehicleFuelCard(一对多关系)有关的实体“Person”。在我的“创建人”的说法,我包括通过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); 
} 

这里是视图模型,我使用:

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

在添加人员时添加加油卡的任何想法?谢谢 !

回答

0

如果您想要在同一个请求上发布PersonFuel Card的帖子,您需要更新客户端的数据以包含Fuel Card作为请求的一部分。

这是在客户端,在服务器端,您可以将Fuel Card作为嵌套对象添加到Person(注意序列化到客户端时的循环引用)。

这里是一个粗略的例子。更新客户端上的对象以包含PersonViewModelFuel 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 
}); 
+0

谢谢...我想我必须做一些研究,因为我没有抓住你所说的一切。但是,谢谢。 – Traffy 2013-03-04 15:26:30

+0

np,我已经扩展了我的答案。 – Ulises 2013-03-04 15:44:36

+0

谢谢,我会试试这个! – Traffy 2013-03-04 15:52:21