web-dev-qa-db-ja.com

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という名前のレコードを取得できます。しかし、contact = "calgary、vancouver"を指定すると、Webページがエラーになります。

Url.Actionで2つのパラメーターを呼び出すにはどうすればよいですか。私は以下を試しましたが、それも間違っているようです。

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

正しいオーバーロードは次のとおりです(この例では、routeValues無名オブジェクトへの終了}がないため、コードで例外がスローされます)。

<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>

これは、2つのパラメーターを渡すGetByListコントローラーアクションを正常に呼び出します。

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

これはMVC 5で機能します:

<a href="@Url.Action("ActionName", "ControllerName", new { paramName1 = item.paramValue1, paramName2 = item.paramValue2 })" >
    Link text
</a>
4
César León

parseQueryStringユーティリティを使用してNameValueCollectionであるとドキュメントに記載されていても、HttpValueCollectionという名前のプライベートコレクションを返すことができます。次に、キーを手動で追加すると、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>
3
Bart Calixto