我看到this answer描述了对无密钥(非无价值)参数的ASP.NET支持,例如http://some.url?param1¶m2
,并确认它们可以在Request.QueryString
上查看,如:
var values = this.Request.QueryString.GetValues(null);
values.Any(o => o == "param1");
这很好,花花公子,但现在我想生成这样的网址。我的第一个直觉是使用RouteValueDictionary: routeValues
的{{1}}参数,将null作为关键字:
Url.Action
但显然是C#forbids nulls as dictionary keys因为原因。
我还尝试将空字符串作为键,但它会生成一个查询字符串,如:@{
var dict = new RouteValueDictionary();
dict.Add(null, "param1");
dict.Add(null, "param2");
}
<a href="@Url.Action("ActionName", dict)">Very link, amaze</a>
,其中包含2个我想要的等号。
当然我可以通过字符串操纵我的URL并将?=param1,=param2
部分添加到查询字符串中,但我希望能有一个简洁的解决方案。
答案 0 :(得分:1)
您想要添加键值,但不允许保留值null。
RouteValueDictionary ignores empty values
例如,你可以添加一个像1这样的值,但是你会丢失你的精细和花花公子的解决方案。
@{
var dict = new RouteValueDictionary();
dict.Add("param1",1);
}
<a href="@Url.Action("Index", dict)">Very link, amaze</a>
对于另一种解决方案,您必须编写一些自定义代码。
答案 1 :(得分:0)
由于没有内置帮助器,为什么不自行动手:
public static class UrlHelperExtensions
{
public static string MyAction(this UrlHelper urlHelper, string actionName, IList<string> parameters)
{
string url = urlHelper.Action(actionName);
if (parameters == null || !parameters.Any())
{
return url;
}
return string.Format("{0}?{1}", url, string.Join("&", parameters));
}
}
然后:
@{
var parameters = new List<string>();
parameters.Add("param1");
parameters.Add("param2");
}
@Url.MyAction("ActionName", parameters)