Параметры url.Action?

116

В листинге контроллера у меня есть

 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 ... Я могу вытащить записи для имени Джон. но когда я даю contact="calgary, vancouver", веб-страница переходит в ошибку.

Как я могу вызвать два параметра в Url.Action. Я пробовал следующее, но это тоже кажется неправильным.

  <a href="<%:Url.Action("GetByList","Listing" , new {name= "John" , contact= " calgary, vancouver" })%>"><span>People</span></a>
user787788
источник

Ответы:

207

Ниже правильная перегрузка (в вашем примере вам не хватает закрытия }на 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>

который успешно вызовет действие GetByListконтроллера, передав два параметра:

public ActionResult GetByList(string name, string contact) 
{
    ...
}
Дарин Димитров
источник
@ user787788, какая у вас проблема? Что значит отказ от двух параметров ? Кто не принимает? Вы получаете сообщение об ошибке? Действие вашего контроллера не выполняется? Вы ошибаетесь в значениях? Быть конкретной.
Дарин Димитров
Когда я даю два параметра, страница aspx даже не попадает в контроллер. его обнаружение ошибки на самой странице. У меня есть исключение defalut, называемое чем-то изношенным. aspx идет туда
user787788 08
@ user787788, в чем ошибка? Вы получаете точное сообщение?
Дарин Димитров
ошибка в том, что вы могли неправильно ввести адрес (URL).
user787788 08
2
@DarinDimitrov, я знаю, что это очень старый пост, но я видел, что вы были в сети. Я не думаю, что вы знаете, как передать параметр динамически (не жестко запрограммированный, как "Джон")?
8

Это работает для MVC 5:

<a href="@Url.Action("ActionName", "ControllerName", new { paramName1 = item.paramValue1, paramName2 = item.paramValue2 })" >
    Link text
</a>
Сезар Леон
источник
4

вы можете вернуть частную коллекцию с именем 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>
Барт Каликсто
источник
0

Вот еще один простой способ сделать это

<a class="nav-link"
   href='@Url.Action("Print1", "DeviceCertificates", new { Area = "Diagnostics"})\@Model.ID'>Print</a>

Где @Model.IDэто параметр

И вот второй пример.

<a class="nav-link"
   href='@Url.Action("Print1", "DeviceCertificates", new { Area = "Diagnostics"})\@Model.ID?param2=ViewBag.P2&param3=ViewBag.P3'>Print</a>
разработчик
источник