【问题标题】:MVC Action Link IssueMVC 操作链接问题
【发布时间】:2015-10-06 14:31:40
【问题描述】:

我遇到了 MVC 5 中关于 Html.Actionlink 的不一致之处。在不同的 cshtml 文件中我可以使用相同的代码,但是生成的 url 目标是不同的。

比如这行代码:

<td>@Html.ActionLink(item.Description, "Edit", new { item.ParentTableID }) </td>

生成此 URL

localhost\MyControllerClass\Edit?ParentTableID=35

然后正确调用 ActionView 方法 Edit 并按预期为参数提供 35。

但是,在另一个 cshtml 文件中,这一行

<td>@Html.ActionLink("Edit", "EditChild", new { id = f.ApplicationTableFieldID})</td>

产生这个网址

localhost/MyControllerClass/Edit/7

当它点击 EditChild Action View 时,参数为 null。

我现在已经看过几次了,但还不能理解是什么造成了不同。但我需要第一个结果。

谢谢。

【问题讨论】:

  • 不是我知道答案,但是在您的每个操作链接中,对于参数,您指定 'id' = f.ApplicationTableFieldID,而在另一个中,您只有 item.ParentTableID。你试过让它们一样吗?就拥有@Html.ActionLink("Edit", "EditChild", new {f.ApplicationTableFieldID})而言

标签: asp.net-mvc-5 html.actionlink


【解决方案1】:

确保在 Action 方法和 ActionLink Html 帮助器中正确命名您的 ID 参数。视觉上的差异来自 MVC default 路由以及它如何获取名为 ID 的参数并将其放入 URL 中而无需查询字符串(?后跟东西)

如果你的操作方法是这样的

public ActionResult EditChild(int ParentTableID){}

然后,当您将 ID 参数传回 URL 时,您需要将其命名为 ParentTableID

<td>@Html.ActionLink("Edit", "EditChild", new { ParentTableID = f.ApplicationTableFieldID})</td>

现在应该生成以下 URL

localhost\MyControllerClass\EditChild?ParentTableID=3

【讨论】:

  • 如果只接受一个参数,调用action时是否需要指定参数名? (不是批评,合法的查询)
  • @jaredlee.exe - 这取决于你的路线是如何设置的。默认情况下,id 不需要指定,但如果你的参数名称是ParentTableID,那么你需要指定它。
  • 是的 - 这就是模型绑定器的工作方式。您的参数名称必须与操作方法所期望的匹配。如果您在 post 方法中将整个视图模型传回,这同样适用,每个属性都必须匹配一个名称,否则该值将不会绑定到该参数/属性。
猜你喜欢
  • 2012-03-03
  • 2018-03-17
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多