如何在 ASP.NET 中创建无密钥 URL 参数
How to create keyless URL parameters in ASP.NET
我看到 this answer 描述了 ASP.NET 对无键(不是无值)参数的支持,例如 http://some.url?param1¶m2
,并确认它们可以在 Request.QueryString
上查看,例如:
var values = this.Request.QueryString.GetValues(null);
values.Any(o => o == "param1");
这很好,但现在我想生成这样的 url。我的第一直觉是使用 Url.Action
的 RouteValueDictionary: routeValues
参数并将 null 作为键:
@{
var dict = new RouteValueDictionary();
dict.Add(null, "param1");
dict.Add(null, "param2");
}
<a href="@Url.Action("ActionName", dict)">Very link, amaze</a>
但显然是 C# forbids nulls as dictionary keys 因为某些原因。
我也尝试过将空字符串作为键,但它会生成如下查询字符串:?=param1,=param2
其中包含我想要的另外 2 个等号。
当然我可以对 URL 进行字符串操作并将 ¶m1
部分添加到查询字符串中,但我希望得到一个简洁的解决方案。
您想添加键值,但不允许将值保留为 null。
RouteValueDictionary ignores empty values
例如,您可以添加像 1 这样的值,但是您失去了很好的解决方案。
@{
var dict = new RouteValueDictionary();
dict.Add("param1",1);
}
<a href="@Url.Action("Index", dict)">Very link, amaze</a>
对于另一种解决方案,您将必须编写一些自定义代码。
既然没有内置的帮助程序,为什么不自己动手:
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)
我看到 this answer 描述了 ASP.NET 对无键(不是无值)参数的支持,例如 http://some.url?param1¶m2
,并确认它们可以在 Request.QueryString
上查看,例如:
var values = this.Request.QueryString.GetValues(null);
values.Any(o => o == "param1");
这很好,但现在我想生成这样的 url。我的第一直觉是使用 Url.Action
的 RouteValueDictionary: routeValues
参数并将 null 作为键:
@{
var dict = new RouteValueDictionary();
dict.Add(null, "param1");
dict.Add(null, "param2");
}
<a href="@Url.Action("ActionName", dict)">Very link, amaze</a>
但显然是 C# forbids nulls as dictionary keys 因为某些原因。
我也尝试过将空字符串作为键,但它会生成如下查询字符串:?=param1,=param2
其中包含我想要的另外 2 个等号。
当然我可以对 URL 进行字符串操作并将 ¶m1
部分添加到查询字符串中,但我希望得到一个简洁的解决方案。
您想添加键值,但不允许将值保留为 null。
RouteValueDictionary ignores empty values
例如,您可以添加像 1 这样的值,但是您失去了很好的解决方案。
@{
var dict = new RouteValueDictionary();
dict.Add("param1",1);
}
<a href="@Url.Action("Index", dict)">Very link, amaze</a>
对于另一种解决方案,您将必须编写一些自定义代码。
既然没有内置的帮助程序,为什么不自己动手:
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)