T4MVC从当前上下文推断的可选参数

时间:2012-10-15 21:25:57

标签: c# asp.net-mvc url-routing t4mvc

我已经在T4MVC OptionalParameter values implied from current context阅读了另一篇关于此事的帖子,我正在使用最新的T4MVC(2.11.1),假设有修复。我甚至检查过以确保它在那里 - 它是。

我仍在根据当前上下文填写可选参数。

例如:假设我有一个列表,默认情况下以一个人的姓氏排序。我可以选择使用名字而不是URL

http://localhost/list/stuff?orderby=firstname

当我在该页面时,我想通过名字返回订购代码:

@Html.ActionLink("order by last name", MVC.List.Stuff(null))

我想要的链接只是

http://localhost/list/stuff

没有任何参数来保持URL简单和简短 - 在操作中调用默认行为。但是保留 orderby 并且网址仍然是

http://localhost/list/stuff?orderby=firstname

任何帮助都会很棒。我知道在最常见的情况下,这会删除查询参数 - 也许我确实有一个特殊情况,它没有被删除。我发现它只发生在我在RenderPartial中包含的页面中的URL时。

我的实际代码是

<li>@Html.ActionLink("Recently Updated",  MVC.Network.Ticket.List(Model.UI.AccountId, "LastModifiedDate", null, null, null, null, null))</li>
<li>@Html.ActionLink("Recently Created",  MVC.Network.Ticket.List(Model.UI.AccountId, "CreatedDate", null, null, null, null, null))</li>
<li>@Html.ActionLink("Most Severe",       MVC.Network.Ticket.List(Model.UI.AccountId, "MostSevere", null, null, null, null, null))</li>
<li>@Html.ActionLink("Previously Closed", MVC.Network.Ticket.List(Model.UI.AccountId, "LastModifiedDate", null, "Closed", null, null, null))</li>

当有人点击以前关闭并转到?status =已关闭时,就会出现此问题。当他们点击Latest Updated时,我希望status参数消失(传递null)。但是?status = closed会保留在生成的URL中。

非常感谢任何见解。

更新10/16/12

代码:

@html.action("Profile", MVC.Profile.Index())

生成了网址:

http://localhost:55059/network/ticket/14441327-128b-e111-af72-0050569e0924?Controller=profile&Action=index

这只发生在特定页面上。实际上这很危险......

2 个答案:

答案 0 :(得分:0)

从我可以从在线资源中找到的东西,这种行为不是归因于T4MVC,而是归因于MVC框架本身。关于T4MVC使用哪个辅助函数的东西。在我的项目中,我刚刚切换到vanilla MVC语法。使用routeValues传入的匿名对象进行修改可以明确控制查询字符串参数。执行以下操作将始终有效:

@Html.ActionLink("Recently Updated", "Ticket", "Network", new { Id = Model.UI.AccountId, orderby = "LastModifiedDate" }, null))

...并生成如下HTML:

<a href="http://localhost:55059/Network/Ticket/14441327-128b-e111-af72-0050569e0924?orderby=LastModifiedDate">Recently Updated</a>

答案 1 :(得分:0)

如果有人仍然面临这个问题,这就是我找到的解决方案

http://yaweriqbal.wordpress.com/2014/05/25/actionlink-passing-parameter-as-querystring/