【问题标题】:Parameters for Controller from Html.ActionLink来自 Html.ActionLink 的控制器参数
【发布时间】:2018-01-09 07:16:50
【问题描述】:

在主页视图中,我生成了许多链接:

        <ul class="nav navbar-nav">
            @foreach (var item in ViewBag.RegList)
            {
                <li>@Html.ActionLink((string)item.registryName, "Index", "Registry", new { item.registryName }, new { item.registryID }) </li>
            }
        </ul>

我不明白 - 如何在 ActionLink 中为我的控制器设置参数以及它们从那里去哪里?

这就是我在控制器中定义索引的方式:

public async Task<ActionResult> Index(object attr)

但在 attr 中只有对象,当转换为字符串时变为空。如果原始类型是字符串 - 那么也是 null。

如何传输参数?还是我将值转换为错误的类型?

我也不明白 - ActionLink (routeValues) 的第四个参数必须是什么?

我正在使用的方法:https://msdn.microsoft.com/en-us/library/dd504972(v=vs.108).aspx

或者这个:https://msdn.microsoft.com/en-us/library/dd493068(v=vs.108).aspx

【问题讨论】:

  • new { attr = item.registryName }为第四个参数,方法为public async Task&lt;ActionResult&gt; Index(string attr)(第五个参数用于添加html属性,也需要遵循相同的格式
  • 我如何将这些 html 属性从第 5 个参数获取到我的控制器?
  • 你不需要 - 它用于添加 html 属性,例如向链接添加类名,它将是 new { @class = "form-control" }。我假设您想将多个参数传递给该方法,在这种情况下,第 4 个参数将是 new { someParameterName + Item.SomeProperty, anotherParameterName = item.AnotherProperty }

标签: c# html asp.net asp.net-mvc-5


【解决方案1】:

如果您查看创建的链接,它们将包含一组查询字符串参数

     "https://some.where/controller/SomeAction/7788?extraParam1=foo&extraParam2=bar"

MVC 的标准路由配置使参数“id”成为本地路径的一部分(示例中为“7788”),而附加参数被添加到查询字符串中(问号之后)。

您对操作的方法签名应该类似于

public async Task<ActionResult>
           SomeAction(string id, string extraParam1, string extraParam2)

在我的示例链接中获取参数。

【讨论】:

  • OP 最终可以将其操作的attr 重命名为id,或者将默认参数名称更改为attr
  • 你是对的,但问题是如何访问这些值,所以我认为更多的解释是合适的。
  • 哦,所以控制器中参数的名称很重要。非常感谢
猜你喜欢
  • 1970-01-01
  • 2012-12-18
  • 1970-01-01
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-05
相关资源
最近更新 更多