【问题标题】:MVC Html.ActionLink removes empty querystring parameter from URLMVC Html.ActionLink 从 URL 中删除空查询字符串参数
【发布时间】:2013-07-17 14:14:43
【问题描述】:

我正在使用Html.ActionLink(string linkText, string actionName, object routeValues) 重载将一些参数发送到操作方法..

有时我需要传递一个空参数值,例如:?item1=&item2=value

我在我创建的匿名类型中指定参数并作为routeValues 传递,但nullstring.Empty 都会导致URL 省略空的item1 参数。

new { item1 = null, item2 = "value" } 
new { item1 = string.Empty, item2 = "value" }
new { item1 = "", item2 = "value" }

// all result in:
?item2=value

我可以手动创建 URL,但我想使用辅助方法。

建议?

【问题讨论】:

    标签: asp.net-mvc razor parameters query-string actionlink


    【解决方案1】:

    如下创建EmptyParameter类:

    public class EmptyParameter
    {
        public override string ToString()
        {
            return String.Empty;
        }
    }
    

    然后:

    @Html.ActionLink("Action",
                     "Controller",
                      new { item1 = new EmptyParameter(), item2 = "value" });
    

    【讨论】:

    • 我还没有尝试过这个,我已经更改了代码来手动创建链接,但我会接受这个,因为你似乎确切地知道如何修复它,而且你的速度很快! :D
    • 我确实尝试过,它似乎确实生成了item1=&item2=value。谢谢。
    • 由于 DBNull 的 ToString() 实现被定义为返回 String.Empty,因此您可以选择使用 DBNull.Value 并避免定义 EmptyParameter 类。
    • 为什么 .Net 团队会删除 RouteCollection.GetVirtualPathForArea(HttpContext,string) 中的空值?什么原因?无论如何thanx,优秀的解决方案!我在这背后浪费了一整天。
    • @ChristopherKing 更好地使用UrlParameter.Optional,因为它比DBNull.Value 更相关并且更容易混淆
    猜你喜欢
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 1970-01-01
    • 2010-11-12
    • 2021-05-13
    • 2011-02-02
    相关资源
    最近更新 更多