从控制器重定向到另一个控制器的另一个视图

时间:2017-09-07 09:52:03

标签: c# arrays asp.net-mvc list razor

我有两个控制器HomeBookReservation,我正在尝试从BookReservation控制器重定向到Home控制器的视图而不重定向到主控制器的索引{{1 }。

这是我对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"); } 的视图index.cshtml我得到临时数据并显示它的元素:

home
  

问题是我无法在视图标签内显示 @{ 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

任何建议?

4 个答案:

答案 0 :(得分:1)

更改此返回RedirectToAction(“索引”);
在Book Reservation控制器中返回RedirectToAction(“Index”,“Home”);

预订控制器   -

[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>
     }
  }

答案 1 :(得分:1)

问题似乎是一个综合问题,需要分解:

  1. 控制器重定向到某个动作,因此绝对应该是:

    return RedirectToAction ("YourAnotherAction", "YourAnotherController");
    

我找不到您要重定向到的Home Controller的操作。您想避免Index的{​​{1}}操作,但不要定义要查看的确切操作。

  1. 尝试发送其他数据,并检查您的所有溃败情况是否正常。只需检查您是否正在检查相同的区域,项目等即可。

  2. 只需检查Home Controller是否为空。

最后,Ashkan Mobayen Khiabani提供了一个很好的建议,请检查一下。仍然存在什么问题?他建议将其重定向到其他操作-尝试一下。 希望有帮助。

答案 2 :(得分:0)

您可以使用其路径判断加载哪个视图:

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

你甚至可以这样做:

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

答案 3 :(得分:0)

TempData仅保留两个后续请求的信息&amp;通常用于在控制器之间传递数据(重定向)。您可以使用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