将创建的数据传递给另一个控制

时间:2016-09-02 15:30:53

标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-4

我正在使用ASP.NET MVC实体框架,我有一个页面来插入数据

public ActionResult Create()
        {
            return View();
        }

        // POST: /Home/Create
        // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
        // more details see http://go.microsoft.com/fwlink/?LinkId=317598.
        [HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include="id,firstname,lastname,email,guests,guestfirstname,guestlastname,productInterest,occupancyTimeline,isInvestment,timeSlot,dateSlot")] CP_LC_Preview cp_lc_preview)
        {
            if (ModelState.IsValid)
            {
                db.Data.Add(cp_lc_preview);
                db.SaveChanges();
                return RedirectToAction("Confirm", new { info = cp_lc_preview });
            }

            return View(cp_lc_preview);
        }

我要做的是获取刚刚输入的数据并将其传递给另一个控制器进行显示。像确认页面。

以下是确认页面的方法

public ActionResult Confirm()
        {
            return View();
        }

2 个答案:

答案 0 :(得分:3)

您可以考虑遵循 PRG 模式。

PRG 代表 POST - REDIRECT - GET 。使用此方法,在成功保存数据之后,您将在查询字符串中发出一个具有唯一ID的重定向响应,使用该响应,第二个GET操作方法可以再次查询资源并将某些内容返回到视图。

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include="id,firstname,lastname,email,guests,guestfirstname,guestlastname,productInterest,occupancyTimeline,isInvestment,timeSlot,dateSlot")] CP_LC_Preview cp_lc_preview)
{
    if (ModelState.IsValid)
    {
       db.Data.Add(cp_lc_preview);
       db.SaveChanges();
       var id = cp_lc_preview.Id; 
       return RedirectToAction("Confirm", new { id = id });
    }
   return View(cp_lc_preview);
}

并在您的Confirm操作方法中,使用id参数并使用其值再次从db读取记录并根据需要使用。

public ActionResult Confirm(int id)
{
   var d = db.Data.FirstOrDefault(g=>g.Id==id);
   // Use d as needed   
   // to do : Return something
}

<强> TempData的

如果您不希望在网址中包含此ID,请考虑使用TempData传递数据。但TempData的寿命很短。一旦读取,数据就消失了。 TempData使用场景后面的Session来存储数据。

TempData["NewItem"] = cp_lc_preview;
return RedirectToAction("Confirm", "controllerName");

并在确认方法

public ActionResult actionname()
{      
  var model=TempData["NewItem"] as CP_LC_Preview 
  // to do : Return something
}

供您参考

How do I include a model with a RedirectToAction?

答案 1 :(得分:2)

您可以使用 TempData

TempData["YourData"] = YourData;//persist data for next request

var myModel=TempData["YourData"] as YourData //consume it  on the next request

什么是TempData?

  
      
  1. TempData意味着一个非常短暂的实例,你应该只使用它   仅在当前和后续请求期间。

  2.   
  3. 由于TempData以这种方式工作,您需要确定下一个请求是什么,以及   重定向到另一个视图是唯一可以保证这一点的时间。

  4.   
  5. 因此,使用TempData可靠运行的唯一场景是何时   你正在重定向。这是因为重定向会杀死当前请求,然后创建一个   服务器上的新请求,用于提供重定向的视图。

  6.   
  7. 简单地说,Asp.Net MVC TempData字典用于在之间共享数据   控制器动作。

  8.   
  9. TempData的值会一直持续到读取或当前用户的会话超时为止。

  10.   
  11. 默认情况下,TempData将其内容保存到会话状态。

  12.   
  13. 读取TempData值时会将其标记为删除。在请求结束时,   任何标记的值都将被删除。

  14.   
  15. 好处是,如果您有多个重定向链,它将不会导致TempData    被清空的价值观仍将存在,直到你真正使用它们,然后他们清理完毕    他们自动。

  16.   

我写了一篇关于它的文章。你可以在这里阅读:How to use Asp.Net MVC TempData Properly