Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc asp.net mvc-ActionLink的呈现不一致_Asp.net Mvc_Asp.net Mvc 3_Asp.net Mvc Routing - Fatal编程技术网

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

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

我有一个控制器,它接受以下两种格式的URL:

  • 网络/AddOrEdit->在页面上呈现空白表单以添加新的网络对象
  • Network/AddOrEdit/[id]->呈现带有预填充表单的页面以编辑网络对象 带ID[ID]
显然,每个实例中使用的都是相同的视图——我的设计目标之一是使用相同的视图进行添加和编辑

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

@Html.ActionLink("Add", "AddOrEdit", "Network")
通常,这会正确呈现为
/Network/AddOrEdit

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

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

有什么建议吗?我能做什么(

我自己也尝试过:

@Html.ActionLink("Add", "AddOrEdit", "Network", new { id = UrlParameter.Optional })
显然,这个也能用

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

希望这对您也有用。

您的猜测是对的。MVC路由机制可能会重用当前请求中的路由变量来生成传出路由数据。这就是为什么从当前请求填充
id
参数的原因。在生成链接时,您应该明确指定
id

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

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

谢谢,但我认为你还没有理解这个问题。我希望链接在最后没有id的情况下呈现。谢谢你回来看这个Daryl,但这不起作用k、 奇怪的是,它只是将文本“Length=7”附加到查询字符串的末尾。这些非常重要的空值之一。我想这个问题以前已经被问过了,所以:这解决了问题。我想我只是不太了解ActionLink重载!