2014-09-25 116 views
0

我有一个控制器(历史)中的创建操作,它从另一个表(资产)接收ID的参数。交叉控制器更新

一旦视图返回数据以创建新的历史记录,我还需要它更新资产表中的一个字段。

我不确定实现此目标的最佳做法。创建操作可以/应该在另一个控制器上调用编辑操作,还是应该//访问历史记录控制器中的资产模型并使用LINQ表达式进行更新。

回答

0

我已工作使用LINQ选项:

public ActionResult Create([Bind(Include = "ServiceID,AssetID,Date,ContractorID,Notes")] ServiceHistory serviceHistory) 
{ 
    if (ModelState.IsValid) 
    { 
     db.ServiceHistories.Add(serviceHistory); 

     // Upadte Next Service Date 
     var query = from r in db.Assets 
       where r.AssetID == serviceHistory.AssetID 
       select r; 

     foreach (Asset r in query) 
     { 
      int freq = (int)r.ServiceFrequency; 
      r.NextServiceDate = DateTime.Now.Date.AddMonths(freq); 
     } 
     db.SaveChanges(); 

     return RedirectToAction("Details", "Assets", new { id = serviceHistory.AssetID }); 
    } 

    ViewBag.AssetID = new SelectList(db.Assets, "AssetID", "Description", serviceHistory.AssetID); 
    return View(); 

} 

请让我知道,如果你认为这是一个黑客位的,有一个更好的办法。