2016-09-02 2 views
1

Я использую ASP.NET MVC Entity Framework и у меня есть страница для вставки данныхPass созданы данные на другой контроллер

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(); 
     } 
+0

"передать его" откуда? Как правило, действие контроллера принимало модель как параметр метода, как вы уже делали во втором методе «Create()»). Как конкретно пользователь запрашивает действие «Подтвердить()»? – David

ответ

3

Вы можете рассмотреть после PRG рисунка.

PRG выступает за POST - REDIRECT - GET. При таком подходе После успешного сохранения данных вы выдадите ответ перенаправления с уникальным идентификатором в querystring, используя тот второй метод действия 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, имеют идентификатор параметра и используя значение, что прочитать запись из БД снова и использовать по мере необходимости.

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

TempData

Если вы не предпочитаете иметь этот идентификатор в URL, рассмотреть возможность использования TempData для передачи данных. Но TempData имеет короткий срок службы. После чтения данные исчезли. TempData использует сессию за сценой для хранения данных.

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

и в методе Confirm

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

Для справки

How do I include a model with a RedirectToAction?

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. Поскольку TempData работает таким образом, вам необходимо точно знать, каким будет следующий запрос, и перенаправление на другое представление - это единственный раз, когда вы можете это гарантировать.

  3. Таким образом, единственный сценарий, при котором с помощью TempData будет надежно работать, когда вы redirecting.This потому, что редирект убивает текущий запрос, а затем создает новый запрос на сервер, чтобы обслуживать перенаправлены вид.

  4. Проще говоря, словарь Asp.Net MVC TempData используется для обмена данными между действиями контроллера .

  5. Значение TempData сохраняется до тех пор, пока оно не будет прочитано или пока сеанс пользователя не истечет.

  6. По умолчанию TempData сохраняет его содержимое в состояние сеанса.

  7. Значения TempData отмечены для удаления, когда вы их читаете. В конце запроса любые отмеченные значения удаляются.

  8. Преимущества заключается в том, что если у вас есть цепочка из нескольких переадресаций не будет вызывать TempData к опорожнить значения все еще будут там, пока вы на самом деле не использовать их, то они прояснятся после самих автоматически.

Я написал статью о it.You можно прочитать здесь: How to use Asp.Net MVC TempData Properly