ASP.NET MVC - ActionLink渲染不一致

3
我有一个控制器,它接受以下两种格式的URL:
  • Network/AddOrEdit -> 在页面上呈现一个空白表单,用于添加新的网络对象
  • Network/AddOrEdit/[id] -> 在页面上呈现一个预填充的表单,用于编辑ID为[id]的网络对象
显然,在每个实例中都使用相同的视图——我的设计目标之一是为添加和编辑目的使用相同的视图。
母版页包含指向添加页面的链接,如下所示:
@Html.ActionLink("Add", "AddOrEdit", "Network")

通常情况下,这将正确地呈现为/Network/AddOrEdit

然而,当我在编辑页面上(即当前URL的格式为Network/AddOrEdit/[id])时,添加链接会在末尾带有该ID,因此添加链接实际上指向编辑页面。这不是我想要的!

因此,由于MVC似乎允许来自查询字符串的当前ID干扰ActionLink的呈现,您有什么建议可以解决这个问题吗? :(


1
我认为这个问题之前在SO上已经被问过了:https://dev59.com/VnRA5IYBdhLWcg3w6SbZ - HerbalMart
2个回答

4
你的猜测是正确的。MVC路由机制可以重用当前请求中的路由变量以生成输出路由数据。这就是为什么id参数从当前请求中填充。当生成链接时,应明确指定id
@Html.ActionLink("Add", "AddOrEdit", "Network", new { id = String.Empty }, null)

当路由系统看到带有可选的id参数的路由,并且路由值为string.Empty时,它会生成没有结尾id的链接。

1
这解决了问题。我猜我只是不够了解我的ActionLink重载! - David

2
我自己尝试过这个方法:
@Html.ActionLink("Add", "AddOrEdit", "Network", new { id = UrlParameter.Optional })

显然,这个也可以运行。
@Html.ActionLink("Add", "AddOrEdit", "Network", new { id = String.Empty })

希望这对您也有帮助。

谢谢,但我认为你没有理解我的问题。我想要的是链接在结尾处不带有ID。 - David
感谢您回来,Daryl,但这并没有起作用。奇怪的是,它只是将文本“Length=7”附加到查询字符串的末尾。 - David
其中一个非常重要的空值。 - David

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接