【问题标题】:Call an action from another action without return statement从另一个动作调用一个动作而不用返回语句
【发布时间】:2023-03-22 05:45:01
【问题描述】:

这是我的 Controller 类的一部分:

if (ds.Tables.Count > 1)
{
    if (ds.Tables[0].Rows.Count > 0)
    {  
        dt = ds.Tables[0];
        dr = dt.Rows[0];

        TempData["AgentId"] = dr[0].ToString();
        TempData["AgentCode"] = dr[1].ToString();
        TempData["CenterName"] = dr[2].ToString();
        TempData["LevelName"] = dr[3].ToString();

        Session["AgentId"] = dr[0].ToString();
        Session["LogInSession"] = SessionId;

        return RedirectToAction("DashBoard", this.View(new AgentDetails { AgentId = Session["AgentId"].ToString() }));
        //return this.View("DashBoard", new AgentDetails { AgentId = Session["AgentId"].ToString()});
    }

我想传递这个参数并分别调用这个动作方法。这可能吗?

【问题讨论】:

  • 那你有什么问题?为什么要使用return View() 而不是return RedirectToAction()
  • @StephenMuecke 我正在发送值来布局视图,因此在此过程中它不会呈现@Model.AgentId。所以我正在尝试使用return View() 并希望调用该操作方法,以便我的数据可以传递到该视图。
  • 当然可以(如果你已经初始化了一个模型并根据你传递给它的AgentId 参数的值设置它的属性。但是你到底为什么要传递一个复杂的对象呢?像 GET 方法(如果 AgentDetails 的任何属性是复杂的对象或集合,它将失败。它应该是 return RedirectToAction("DashBoard", new { AgentId = Session["AgentId"] }); 重定向到 public ActionResult DashBoard(int agentId)
  • @StephenMuecke 是的,我明白了。要试试这个。谢谢

标签: c# asp.net-mvc actionmethod


【解决方案1】:

动作只是一个函数。您可以像调用任何其他函数一样调用它。

var result = Dashboard();
if(result.xxxx) // do whatever
return View(new AgentDetails { AgentId = Session["AgentId"].ToString() });

如果这是你想做的,那你为什么不把Dashboard代码重构成一个可以重用的方法呢?

【讨论】:

  • 是的,实际上我想要你建议的同样的事情。我将此参数发送到布局视图,在这种情况下,操作导致不执行它只是呈现视图。
猜你喜欢
  • 1970-01-01
  • 2018-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-12
  • 1970-01-01
相关资源
最近更新 更多