Параметры 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. но когда я даю контакт = "калгари, ванкувер", веб-страница переходит в ошибку.
Как я могу вызвать два параметра в Url.Action. Я попробовал следующее, но это тоже кажется неправильным.
<a href="<%:Url.Action("GetByList","Listing" , new {name= "John" , contact= " calgary, vancouver" })%>"><span>People</span></a>
Ответы
Ответ 1
Ниже приведена правильная перегрузка (в вашем примере у вас отсутствует закрывающий }
анонимный объект routeValues
, чтобы ваш код выдавал исключение):
<a href="<%: Url.Action("GetByList", "Listing", new { name = "John", contact = "calgary, vancouver" }) %>">
<span>People</span>
</a>
Предполагая, что вы используете маршруты по умолчанию, это должно сгенерировать следующую разметку:
<a href="/Listing/GetByList?name=John&contact=calgary%2C%20vancouver">
<span>People</span>
</a>
который успешно вызовет действие контроллера GetByList
, передающее два параметра:
public ActionResult GetByList(string name, string contact)
{
...
}
Ответ 2
вы можете вернуть частную коллекцию с именем HttpValueCollection, даже в документации говорится, что она имеет имя NameValueCollection с помощью утилиты ParseQueryString.
Затем добавьте ключи вручную, 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>