MVC Url.Action在不同页面中的行为不同

时间:2013-11-03 20:31:25

标签: asp.net-mvc url-action

我已经看到了asp .net“Url.Action”的一个有趣的行为。

<a href="@Url.Action("Index", "Soru")" >@baslik</a>之类的链接在客户端浏览器中显示为<a href="/Soru/Index">denemebaslik</a>,然后用户点击此链接并转到目标网页。

在此目标网页中,<a href="@Url.Action("Index", "Soru")" >@baslik</a>等链接在客户端浏览器中显示为<a href="/Soru/Index/29271654-e19a-4096-8795-3283d8a208ed">denemebaslik</a>

@Url.Action在不同的网页中表现不同。我的路线配置就像

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{*id}",
            defaults: new { controller = "Giris", action = "Index", id = UrlParameter.Optional }
        );

这为什么这样呢?

1 个答案:

答案 0 :(得分:2)

MVC将获取当前页面的查询字符串中的参数,并在呈现指向同一路径的链接时包含它们,基本上保留现有参数。

如果这是您遇到的情景 - 这是设计的。这意味着,对于动作链接指向页面本身的情况,参数已经存在。例如,如果您具有“升序/降序排序”链接,则其他参数(例如价格/描述)将继续包含在链接中,而无需每次都对其进行编码。

如果您不想要其他参数,请使用空字符串指定参数,例如

<a href="@Url.Action("Index", "Soru", new { id = "" })">@baslik</a>

请注意,您无法将null分配给参数,因为它是匿名类型。空字符串工作正常。

顺便说一下,我相信你知道这一点,但你也可以使用更方便的@Html.ActionLink

@Html.ActionLink(baslik, "Index", "Soru", new { id = "" })">

希望这会对你有所帮助。