Url.Action参数?

在上市控制器我有,

public ActionResult GetByList(string name, string contact) { var NameCollection = Service.GetByName(name); var ContactCollection = Service.GetByContact(contact); return View(new ListViewModel(NameCollection ,ContactCollection)); } 

在ASPX页面我打电话,

  <a href="<%:Url.Action("GetByList","Listing" , new {name= "John"} , new {contact="calgary, vancouver"})%>"><span>People</span></a> 

我在ASPX代码中有一个问题…我可以把名字john的logging拉出来。 但是当我给联系人=“卡尔加里,温哥华”,网页出现错误。

我怎么能在Url.Action中调用两个参数。 我尝试了下面,但似乎也是错误的。

  <a href="<%:Url.Action("GetByList","Listing" , new {name= "John" , contact= " calgary, vancouver" })%>"><span>People</span></a> 

以下是正确的重载(在您的示例中,您正在丢失关于routeValues匿名对象的closures} ,因此您的代码将引发exception:

 <a href="<%: Url.Action("GetByList", "Listing", new { name = "John", contact = "calgary, vancouver" }) %>"> <span>People</span> </a> 

假设您正在使用默认路由,则应生成以下标记:

 <a href="/Listing/GetByList?name=John&amp;contact=calgary%2C%20vancouver"> <span>People</span> </a> 

这将成功调用传递两个参数的GetByList控制器操作:

 public ActionResult GetByList(string name, string contact) { ... } 

您可以返回一个名为HttpValueCollection的私有集合,即使文档说这是使用ParseQueryString实用工具的NameValueCollection。 然后手动添encryption钥,HttpValueCollection为您做编码。 然后只需手动追加QueryString:

 var qs = HttpUtility.ParseQueryString(""); qs.Add("name", "John") qs.Add("contact", "calgary"); qs.Add("contact", "vancouver") <a href="<%: Url.Action("GetByList", "Listing")%>?<%:qs%>"> <span>People</span> </a>