我正在尝试将路由值发送到方法但我似乎无法弄清楚这一点。这是我的代码
<% string s = "cool";
object d = new { s = "1" };
%>
<%= Html.ActionLink("Home", "Index", d, "ql")%>
以下代码生成这样的网址
http://localhost:49450/?s=1
网址应该是这样的
http://localhost:49450/?cool=1
我缺少什么
答案 0 :(得分:2)
因为在'new {...}'表达式的上下文中,'s'不对应于它可能首先出现的变量 - 它定义了创建的匿名类的成员的名称。 / p>
当你说:
新{S = 123}
你实际上正在生成一个匿名的类(你永远不会看到该类的名称)。类的每个成员的类型由您分配给它的任何内容隐式确定。在上面的例子中,生成了类似这样的类
class AnonymousClass_S483Ks4 {
public int S {get;set;}
}
有两种方法可以做你想做的事:
1)你不得不说:
new { cool = 123 }
2) 现在我假设您希望名称是动态的,因此您需要使用RouteValueDictionary,它允许您放置键值对。
// RouteValueDictionary is IDictionary<string, object>
var dictionary = new RouteValueDictionary();
string s = "cool";
dictionary.Add(s, 123);
htmlHelper.ActionLink("Home", "Index", dictionary);
正如您所看到的,在这里您可以使用变量's'来表示您想要的任何内容。这应该为您提供所需的URL。