跨控制器更新

时间:2014-09-25 23:03:15

标签: c# asp.net-mvc linq

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

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

我不确定实现这一目标的最佳做法。可以/应该使用Create Action在不同的控制器上调用Edit Action,还是//可以访问History Controller中的Asset模型并使用LINQ表达式进行更新。

1 个答案:

答案 0 :(得分: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();

}

如果您认为这有点黑客并且有更好的方法,请告诉我。