【问题标题】:How to bind data as parameter to ActionLink?如何将数据作为参数绑定到 ActionLink?
【发布时间】:2009-01-27 21:38:23
【问题描述】:

我对 ActionLink 有疑问。 我想为我的 MessageController 传递给我的 ActionLink 参数,用于编辑操作:生成类似 /MessagesController/Edit/4 的东西

所以我有带有绑定表达式的 ListView 控件:

以及如何将此 ID 传递给 ActionLink 作为我的控制器编辑操作的参数? 这不起作用: , 空) %>

【问题讨论】:

  • 不知道为什么没有人在这里暴露他使用Container的问题,这个Container是什么?我认为他正在尝试以某种方式混合 ASP.NET 和 ASP.NET MVC,只是感觉如此。他应该在模型中有他的数据。这就是他不接受解决方案的原因。
  • 同意 - 如果您发现自己遇到这个问题并做类似的事情.. 停止.. 并拿起 MVC 书.. 或者至少阅读更多有关 MVC 的内容..

标签: c# asp.net-mvc


【解决方案1】:

在 MVC 中,您不应该以您拥有的方式从视图中绑定数据。您要传递给 ActionLink 方法的数据需要添加到控制器中的 ViewData 中。然后在视图中从 ViewData 中检索它:

<%= Html.ActionLink("My Edit Link", "Edit", "Message", new { id = ViewData["id"] }) %>

【讨论】:

  • 不确定是不是因为它不在 ViewData 中,但是当我使用 int 参数执行此操作时,我得到了一个错误的链接。下面带有附加“null 参数”的代码仍然有效。
  • 如果您不提供空的第五个参数,它使用不同的方法签名并将带有参数的新 {...} 解释为 HtmlAttributes 而不是 RouteValues。正如你所说,使用 null 参数它应该可以工作,因为它改变了它使用的方法。
【解决方案2】:
<%= Html.ActionLink("My Edit Link", "Edit", "Message", new { id = ((Message)Container.DataItem).ID }, null) %>

【讨论】:

  • 这是正确答案,但 Container 应替换为 Model 或其他一些 ASP.NET MVC 构造。
【解决方案3】:

试试这个

<%= Html.ActionLink("my link", "Edit", "Message", new { id = ((Message)Container.DataItem).ID }) %>

您需要将其放入 RouteData 中才能显示出来。请注意,我假设 id 是您的路线定义中的路线部分之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2016-04-16
    • 2014-05-29
    相关资源
    最近更新 更多