2017-09-07 135 views
-1

的另一種看法,我有兩個控制器HomeBookReservation,我試圖從重定向控制器BookReservation到視圖Home控制器不重定向到家庭控制器if possible的指數。重定向從控制器到另一個控制器

這是我在BookReservation控制器操作:

Validate_rules函數返回List<string[]>並將其存儲在tempdata

[HttpPost] 
    public ActionResult Validate_Data(ReservationDetails reservation_details) 
    { 
     TempData["verification_errors"] = Validate_rules(reservation_details);//this function return List<string[]> 

     return RedirectToAction("Index"); 
    } 

這裏的home認爲index.cshtml我得到的溫度數據並顯示元素其中:

@{ 
        List<string[]> validate_rules = new List<string[]>(); 
        if (TempData["verification_errors"] != null) 
        { 
         validate_rules = (List<string[]>)TempData["verification_errors"]; 

        } 
       }     

       @foreach (var item in validate_rules) 
       {       
        <label >@item[0].ToString() @item[2].ToString()</label> 
       } 

問題是我無法顯示validate_rules元素裏面的視圖標籤我不知道從哪裏問題,當我重定向從BookReservation控制器的臨時數據或什麼?

這是家居控制器:

[HttpGet] 
    [ActionName("Index")] 
    [HandleError] 
    public ActionResult Index_Get(string submit) 
    { 
     bool ParamsChanged = mySessionObject.Parameters.LoadQueryParameters(Request); 

     if (ParamsChanged) 
      return RedirectToAction("Index", mySessionObject.Parameters.GetQueryParameters()); 

     LoadHotelDetails();   
     GetHotelAvailability(); 

     ViewBag.data = TempData["verification_errors"]; 

     return View("Index",myViewModel); 
    } 

什麼建議嗎?

+0

我建議使用'會話[ 「verification_errors」 ]'而不是。 'TempData'存儲在第一個和後續的響應中,當在第二個控制器上返回視圖時,可能'TempData'值已經丟失。 –

回答

0

你可以告訴它查看使用它的路徑來加載:

public ActionResult SomeAction() 
{ 
     if(SomeValue) 
     return View(); 
     else 
     return View("Errors/AccessDenied"); 
} 
+0

我仍然有同樣的問題 – hashim

0

TempData只會保留經常用於兩個後續請求&信息:

public ActionResult BookReservation() 
{ 
    return View("Home/Index"); 
} 

你甚至可以做這樣的事情在控制器之間傳遞數據(重定向)。您可以使用ViewBag的值傳遞到視圖:

控制器

public ActionResult Validate_Data(ReservationDetails reservation_details) 
{ 
    TempData["verification_errors"] = Validate_rules(reservation_details);//this function return List<string[]> 

    return RedirectToAction("Index"); 
} 

public ActionResult Index() 
{ 
    var verification_errors = TempData["verification_errors"]; 
    ViewBag.Errors = verification_errors; 

    // do something 

    return View(); 
} 

查看

@{ 
    List<string[]> validate_rules = new List<string[]>(); 
    if (ViewBag.Errors != null) 
    { 
     validate_rules = (List<string[]>)ViewBag.Errors; 
    } 
}     

@foreach (var item in validate_rules) 
{       
    <label>@item[0].ToString() @item[2].ToString()</label> 
} 

或者乾脆用TempData.Keep返回視圖之前保持的內容:

public ActionResult Index() 
{ 
    TempData.Keep("verification_errors"); 

    // do something 

    return View(); 
} 

參考文獻:

TempData value not persisting if used in view

Losing data from viewbag/tempdata after multiple post

+0

我想你的答案,但仍然有問題 – hashim

+0

什麼是你的問題呢?那個'TempData'仍然是空的還是其他問題發生了?我認爲'TempData.Keep'可以在返回視圖時維持存儲的數據。 –

+0

TempData的不是空我的問題是我無法顯示列表的瀏覽器中的項目列表中具有所有元素 – hashim

0

改變這種返回RedirectToAction( 「指數」);
返回RedirectToAction( 「指數」, 「家」);在典藏控制器

典藏控制器 -

[HttpPost] 
public ActionResult Validate_Data(ReservationDetails reservation_details) 
{ 
    TempData["verification_errors"] = Validate_rules(reservation_details);//this function return List<string[]> 

    return RedirectToAction("Index", "Home"); 
} 

- 家庭控制器

public ActionResult Index() 
{ 
     ViewBag.data= TempData["verification_errors"]; 
} 

- 查看

if (ViewBag.data!= null) 
    { 
    var list = ViewBag.data; 
    foreach (var item in list) 
    {       
     <label >@item[0].ToString() @item[2].ToString()</label> 
    } 
    } 
+0

我仍然有同樣的問題 – hashim

+0

你好哈希姆現在就來試試上面的方法可能是它會爲你工作 –

+0

你好,我試過,但仍同樣的問題 – hashim

相關問題