【问题标题】:How to pass controller name in controller action of some other controller?如何在其他控制器的控制器动作中传递控制器名称?
【发布时间】:2023-04-09 15:33:02
【问题描述】:

我有一个 SQL 查询,我想将控制器名称作为 where 子句比较参数之一传递。应用程序中有许多控制器。根据控制器名称,将执行不同的查询结果。那么如何将控制器的名称传递给第三个控制器。

使用这个@ViewContext.RouteData.Values["controller"],我可以获得控制器的名称,但只能在该控制器的视图中。那么如何在另一个控制器动作方法中实现呢。

【问题讨论】:

  • 如果我理解的很好,你可以将控制器的名称作为action方法参数传递。
  • 我在 Home 控制器的视图中获取控制器的名称,所以从这个视图中我想将它传递给 Testcontroller 操作方法。不知道如何实现?
  • 您打算使用@Html.ActionLink 导航到那里,还是只想在同一页面上呈现TestController 的操作结果与@Html.RenderAction

标签: asp.net-mvc controller controller-action


【解决方案1】:

在 ASP MVC 中有几种方法可以将值传递给操作方法。这取决于请求的类型。

GET 请求示例

// navigation to action
@Html.ActionLink("link","myAction","otherCon", new {controllerNamePar = ViewContext.RouteData.Values["controller"]}

// render result of action into current view
@{Html.RenderAction("myAction","otherCon", new {controllerNamePar = ViewContext.RouteData.Values["controller"]}}

controllerNamePar 将作为 url 中的查询字符串发送。

POST 请求示例

@using (Html.BeginForm("MyAction", "OtherCon", FormMethod.Post))
{
    @Html.Hidden("controllerNamePar", ViewContext.RouteData.Values["controller"])
    <input type="submit" value="OK" />
}

controllerNamePar 将作为 html 表单的一部分发送。

【讨论】:

  • TestController 的视图不存在。此控制器仅包含使用 ajax 调用调用的方法,此方法从数据库中返回一些记录。
  • 没关系。我只想向您展示将值传递给操作方法的唯一方法是通过 QueryString 或通过 html 表单。而且您没有提供足够的信息,您是如何尝试完成任务的,所以我描述了这两个选项。您能否进一步扩展您的问题(显示您尝试完成场景的一些代码 - 主视图、主控制器、其他控制器)。
猜你喜欢
  • 2017-01-13
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 2013-08-17
  • 1970-01-01
  • 2014-04-18
  • 2016-11-25
  • 1970-01-01
相关资源
最近更新 更多