C# 如何在HTML actionlink中动态创建路由

C# 如何在HTML actionlink中动态创建路由,c#,asp.net-mvc,url,url-routing,C#,Asp.net Mvc,Url,Url Routing,我试图将路由值发送到一个方法,但我似乎无法解决这个问题。这是我的密码 <% string s = "cool"; object d = new { s = "1" }; %> <%= Html.ActionLink("Home", "Index", d, "ql")%> url应该是这样的 http://localhost:49450/?s=1 http://localhost:49450/?cool=1 我遗漏了什么,因为在“new

我试图将路由值发送到一个方法,但我似乎无法解决这个问题。这是我的密码

<%  string s = "cool";
    object d = new {  s = "1" };

         %>
<%= Html.ActionLink("Home", "Index", d, "ql")%>
url应该是这样的

http://localhost:49450/?s=1
http://localhost:49450/?cool=1

我遗漏了什么

,因为在“new{…}”表达式的上下文中,“s”与第一次出现的变量不对应-它定义了创建的匿名类的成员的名称

当你说:

新{S=123}

实际上,您正在生成一个匿名类(您永远看不到该类的名称)。类的每个成员的类型由您为其指定的内容隐式确定。在上面的示例中,生成了一个类似这样的类

class AnonymousClass_S483Ks4 {
 public int S {get;set;}
}
有两种方法可以满足您的需求:

1) 你必须说:

new { cool = 123 } 
(二) 现在我假设您希望名称是动态的,因此需要使用RouteValueDictionary,它允许您将键值对放入

        // RouteValueDictionary is IDictionary<string, object>
        var dictionary = new RouteValueDictionary();  
        string s = "cool";
        dictionary.Add(s, 123);
        htmlHelper.ActionLink("Home", "Index", dictionary);
//RouteValueDictionary是IDictionary
var dictionary=新的RouteValueDictionary();
字符串s=“酷”;
增补(第123条);
htmlHelper.ActionLink(“主页”、“索引”、字典);

如您所见,这里可以使用变量“s”来表示您想要的任何内容。这将为您提供所需的URL

好的..我尝试了代码,但它根据您的原始代码生成了一个类似@luke101的链接您可能正在执行“object dictionary=new RouteValueDictionary()”您需要确保传递给ActionLink()的对象是RouteValueDictionaryoh类型是的..我逐字复制了代码并进行了尝试。但它给出了上面的url,我运行了它(我以前没有)并得到了“”,这就是你要找的。我确实遇到过您以前遇到的问题,它是由调用错误的重载(传入“对象”)引起的。检查编译器正在使用的重载,并确保使用的是带有RouteValueDictionary的重载。我正在使用MVC2,但我认为这个签名没有改变。哦。。。M$rulezz。。。他们使用
对象htmlAttributes
进行重载,直到我手动将其转换为
(IDictionary)null
,现在它可以工作了