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

C# 从控制器重定向到另一控制器的另一个视图,c#,arrays,asp.net-mvc,list,razor,C#,Arrays,Asp.net Mvc,List,Razor,我有两个控制器Home和BookReservation,我试图从BookReservation控制器重定向到Home控制器的视图,如果可能的话,不重定向到Home控制器的索引 这是我对BookReservation控制器的操作: [HttpGet] [ActionName("Index")] [HandleError] public ActionResult Index_Get(string submit) { bool ParamsChan

我有两个控制器
Home
BookReservation
,我试图从
BookReservation
控制器重定向到
Home
控制器的视图,如果可能的话,不重定向到Home控制器的索引

这是我对
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);
    }
验证\u规则
函数返回
列表
并将其存储在
tempdata

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

        return RedirectToAction("Index");
    }
问题是我无法显示
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);
    }

有什么建议吗?

您可以通过使用其路径来确定要加载的视图:

public ActionResult BookReservation()
{
     return View("Home/Index");
}
你甚至可以这样做:

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

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


更改此返回重定向到操作(“索引”)
返回重定向到操作(“索引”、“主页”)书内预订控制器

预订控制器 -

--看法

if(ViewBag.data!=null)
{
var list=ViewBag.data;
foreach(列表中的变量项)
{                        
@项目[0]。ToString()@项目[2]。ToString()
}
}

看起来问题是一个复合问题,需要进行一些分解:

  • 控制器重定向到某个操作,因此它肯定应该是:

    return RedirectToAction ("YourAnotherAction", "YourAnotherController");
    
  • 我找不到您试图重定向到的
    主控制器的操作。您希望避免
    主控制器的
    索引
    操作,但不定义要查看的确切操作

  • 尝试发送一些其他数据,并检查您的所有路线是否正常。只需检查您是否正在检查相同的区域、项目等

  • 只需检查
    TempData
    是否为空

  • 最后,Ashkan Mobayen Khiabani提出了一个很好的建议,检查一下。还有什么问题仍然存在?他建议重新定向到其他动作——试试看。
    希望能有所帮助。

    我建议改用
    会话[“验证错误”]
    <代码>TempData
    存储在第一个和后续响应中,当返回第二个控制器上的视图时,可能
    TempData
    值已丢失。我仍然存在相同的问题Hello hashim现在尝试上述方法可能对您有效我认为
    [HttpPost]公共操作结果验证\u数据的问题(ReservationDetails reservation_details){TempData[“verification_errors”]=Validate_rules(reservation_details);//此函数返回列表返回RedirectToAction(“Index”,“Home”);}
    重定向到主视图控制器要重定向到哪个控制器操作?我仍然有相同的问题那么你的问题是什么?是
    TempData
    仍然为空还是发生了其他问题?我认为
    TempData.Keep
    可以在返回视图时保留存储的数据。TempData不为空我的问题是我无法显示浏览器中的列表项列表包含所有元素如果您不喜欢我通过拒绝来改进您的答案所做的更改,请不要将其作为您自己的内容发布,因为这称为剽窃。此外,可能最好采用这种方式,因为它显示了堆栈溢出与留言板的不同,以及您添加的内容更好的原因这是对阿什坎·莫巴耶恩·基亚巴尼的回答的一次投票。@scopchanov,我不知道你对这些改动和剽窃的看法。我没有拒绝任何改动。对不起,如果我把你的一些改动发布为我自己的(我想你是指数字吧?)。此外,我仍然无法对任何答案进行投票,而且我提出的答案似乎更广泛。无论如何,谢谢你的回复。我的意思是,我的整个编辑都包含格式等内容。
    public ActionResult Index()
    {
        TempData.Keep("verification_errors");
    
        // do something
    
        return View();
    }
    
    [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>
         }
      }
    
    return RedirectToAction ("YourAnotherAction", "YourAnotherController");