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

Як я можу викликати два параметри в Url.Action. Я спробував нижче, але це теж здається неправильним.

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

Відповіді:


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 навіть не потрапляє на контролер. виявлення помилки на самій сторінці. У мене є виняток дефактури, що називається щось зникло. aspx йде туди
user787788

@ user787788, в чому помилка? Точне повідомлення, яке ви отримуєте?
Дарин Димитров

помилка в тому, що ви, можливо, неправильно ввели адресу (URL).
користувач787788

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>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.