asp.net mvc - ActionLink的呈现不一致

时间:2011-09-22 11:22:26

标签: asp.net-mvc asp.net-mvc-3 asp.net-mvc-routing

我有一个接受以下两种格式的网址的控制器:

  • 网络/ AddOrEdit - >在页面上呈现一个空白表单以添加新的网络对象
  • 网络/ AddOrEdit / [id] - >呈现具有预填充形式的页面以编辑网络对象 ID [id]

显然,每个实例都使用相同的视图 - 我的设计目标之一是使用相同的视图进行添加和编辑。

母版页包含添加页面的链接,如下所示:

@Html.ActionLink("Add", "AddOrEdit", "Network")

通常这会正确呈现为/Network/AddOrEdit

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

因此,出于某种原因,MVC似乎允许查询字符串中的当前ID干扰ActionLink的呈现。

有什么建议我可以做些什么吗? :(

2 个答案:

答案 0 :(得分:4)

你的猜测是正确的。 MVC路由机制可以重用来自当前请求的路由变量来生成传出路由数据。这就是从当前请求填充id参数的原因。生成链接

时,您应明确指定id
@Html.ActionLink("Add", "AddOrEdit", "Network", new { id = String.Empty }, null)

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

答案 1 :(得分:2)

自己试了一下:

@Html.ActionLink("Add", "AddOrEdit", "Network", new { id = UrlParameter.Optional })

显然,这个也有效。

@Html.ActionLink("Add", "AddOrEdit", "Network", new { id = String.Empty })

希望这也适合你。