Url.Action parametry?

116

Na liście kontrolera mam,

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

Na stronie ASPX, którą dzwonię,

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

Mam problem z kodem ASPX ... Mogę pobrać rekordy dla nazwiska john. ale kiedy podam contact="calgary, vancouver", strona przechodzi do błędu.

Jak mogę wywołać dwa parametry w pliku Url.Action. Próbowałem poniżej, ale to też wydaje się złe.

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

Odpowiedzi:

207

Poniżej przedstawiono poprawne przeciążenie (w Twoim przykładzie brakuje zamknięcia }do routeValuesanonimowego obiektu, więc kod zgłosi wyjątek):

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

Zakładając, że używasz tras domyślnych, powinno to wygenerować następujący znacznik:

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

który pomyślnie wywoła GetByListakcję kontrolera przekazując dwa parametry:

public ActionResult GetByList(string name, string contact) 
{
    ...
}
Darin Dimitrov
źródło
@ user787788, jaki masz problem? Co masz na myśli, mówiąc , że nie akceptujesz dwóch parametrów ? Kto nie przyjmuje? Czy otrzymujesz komunikat o błędzie? Czy twoja akcja kontrolera nie została trafiona? Czy otrzymujesz błędne wartości? Być specyficznym.
Darin Dimitrov
Kiedy podam dwa parametry, strona aspx nawet nie uderza w kontroler. znajduje błąd w samej stronie. mam domyślny wyjątek o nazwie „coś się nie udało”. aspx idzie tam
user787788
@ user787788, jaki jest błąd? Dokładna wiadomość, którą otrzymujesz?
Darin Dimitrov
błąd polega na tym, że być może nieprawidłowo wpisałeś adres (URL).
user787788
2
@DarinDimitrov, wiem, że to bardzo stary post, ale widziałem, że byłeś online. Nie sądzę, żebyś wiedział, jak dynamicznie przekazywać parametr (nie zakodowany na stałe, jak „John”)?
8

Działa to dla MVC 5:

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

możesz zwrócić prywatną kolekcję o nazwie HttpValueCollection, nawet jeśli dokumentacja mówi, że jest to NameValueCollection przy użyciu narzędzia ParseQueryString. Następnie dodaj klucze ręcznie, HttpValueCollection wykona kodowanie za Ciebie. A następnie ręcznie dołącz 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>
Bart Calixto
źródło
0

Oto inny prosty sposób na zrobienie tego

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

Gdzie jest @Model.IDparametr

I tu jest drugi przykład.

<a class="nav-link"
   href='@Url.Action("Print1", "DeviceCertificates", new { Area = "Diagnostics"})\@Model.ID?param2=ViewBag.P2&param3=ViewBag.P3'>Print</a>
Deweloper
źródło