2015-09-07 74 views
1

已更改我的發佈說明因爲我已閱讀「會話」是正確的使用方法。問題是,我發現使用會話很困難,因爲我之前從未使用它。使用會話將數據從視圖傳遞到其他視圖

我想鏈接我的文本框與模型,並將這些值輸入到另一個視圖,在另一個控制器上操作。我想要的只是顯示您在SeatController索引頁面中輸入的值,因此我稍後可以將它們用於我的預訂項目。

我已經走到這一步:含

  • 的BookingController索引視圖
  • 的SeatController包含另一個索引視圖

BookingController:

public class BookingController : Controller 
{ 

    // GET: Booking 
    [HttpGet] 
    public ActionResult Index() 
    { 
     var vm = new BookingModel();    
     return View(vm); 
    } 

    [HttpPost] 
    public ActionResult Index(BookingModel bookingModel) 
    { 

     if (ModelState.IsValid) 
     { 
      Session["SelectedValue"] = bookingModel; 
      return RedirectToAction("Index", "Seat", new { model = bookingModel }); 
     } 
     return View(bookingModel); 
    }  
} 

BookingModel:

public class BookingModel 
{ 
    public string DepartureRoute { get; set; } 
    public string ReturnRoute { get; set; } 
    public DateTime DepartureDate { get; set; } 
    public DateTime ReturnDate { get; set;} 
    public int adults { get; set; } 
    public int childrens {get; set; } 
} 

指數(BookingController)

@model TestApplication.Models.BookingModel 
@Session["SelectedValue"] 


<div class="col-sm-9"> 

@using (Html.BeginForm()) 
{ 
    <div class="col-sm-6"> 
     <label>Outward route</label><br /> 
     @Html.TextBoxFor(m => Model.DepartureRoute, new { @class = "textbox" }) 

     <br /> 

     <label>Departure date</label><br /> 
     @Html.TextBoxFor(m => m.DepartureDate, new { @class = "textbox" }) 

     <br /> 

     <label>Adults:</label><br /> 
     @Html.TextBoxFor(m => Model.DepartureRoute, new { @class = "textbox" }) 
    </div> 

    <div class="col-sm-6"> 

     <label>Return route</label><br /> 
     @Html.TextBoxFor(m => Model.DepartureRoute, new { @class = "textbox" }) 

     <br /> 

     <label>Return date</label><br /> 
     @Html.TextBoxFor(m => m.ReturnDate, new { @class = "textbox" }) 

     <br /> 

     <label>Childrens:</label><br /> 
     @Html.TextBoxFor(m => Model.DepartureRoute, new { @class = "textbox" }) 

     <br /> 
     <label>Information:</label><br /> 
     <button type="submit" class="button_continue">Continue</button> 
    </div> 
} 
</div> 

的 「SeatController」 索引頁是這樣的:

指數(SeatController)

<div class="col-sm-12"> 
<label>Departure route</label><br /> 
@Html.DisplayFor(model => model.DepartureRoute) 

<br /> 

<label>Return route</label><br /> 
@Html.DisplayFor(m => m.ReturnRoute); 

<br /> 

<label>Departure date</label><br /> 
@Html.DisplayFor(m => m.DepartureDate); 

<br /> 

<label>Return date</label><br /> 
@Html.DisplayFor(m => m.ReturnDate); 

<br /> 

<label>Number of adults</label><br /> 
@Html.DisplayFor(m => m.adults); 

<br /> 

<label>Number of childrens</label><br /> 
@Html.DisplayFor(m => m.childrens); 
</div> 

希望有人可以提供一個解決方案或一些指導方針如何做到這一點。

+1

'返回RedirectToAction( 「結果」);'不模型傳遞到'Result'方法。在'Index()'POST方法中,將模型保存到存儲庫並將其ID(您似乎還沒有)傳遞給Result(int ID)方法 - 返回RedirectToAction(「Index」, new {ID = bookingModel.ID});'在Result()'方法中,獲取保存的模型並將其傳遞給'Result.cshtml'視圖。 –

+0

好吧..我正在嘗試閱讀有關存儲庫的信息。 – Mikkel

+0

更新了我的帖子 – Mikkel

回答

0

您可以使用TempData來解決您的問題。

ASP.NET MVC TempData字典用於共享控制器操作的 之間的數據。更多here ....

[HttpPost] 
public ActionResult Index(BookingModel bookingModel) 
{ 
    if (ModelState.IsValid) 
    { 
    TempData["BM"] = bookingModel; 
    return RedirectToAction("Result"); 
    } 
    return View(bookingModel); 
} 


public ActionResult Result() 
{ 
    if (TempData["BM"] != null) 
    { 
    BookingModel bookingModel = (BookingModel) TempData["BM"]; 
    return View(bookingModel); 
    } 

} 
+0

並且只要用戶刷新瀏覽器,它都會失敗:) –

+0

所以這是一個不好的解決方案? – Mikkel

+0

@Mikkel你可以傳遞一些你可以在'Result'動作中唯一標識的東西,比如'return RedirectToAction(「Index」,new {somevalue = xx});'[check this](http://stackoverflow.com/questions/ 2269376 /控制器在asp-net-mvc中傳遞信息) –

相關問題