URL.Aktionsparameter?

115

In der Liste Controller habe ich,

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

Auf der ASPX-Seite rufe ich an,

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

Ich habe ein Problem im ASPX-Code ... Ich kann die Datensätze für den Namen John abrufen. aber wenn ich das gebe contact="calgary, vancouver", geht die Webseite fehlerhaft.

Wie kann ich zwei Parameter in der aufrufen Url.Action. Ich habe das Folgende versucht, aber das scheint auch falsch zu sein.

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

Antworten:

207

Das Folgende ist die richtige Überladung (in Ihrem Beispiel fehlt ein Schließen }des routeValuesanonymen Objekts, sodass Ihr Code eine Ausnahme auslöst):

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

Angenommen, Sie verwenden die Standardrouten, sollte dies das folgende Markup generieren:

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

Dadurch wird die GetByListController-Aktion erfolgreich aufgerufen, wobei die beiden Parameter übergeben werden:

public ActionResult GetByList(string name, string contact) 
{
    ...
}
Darin Dimitrov
quelle
@ user787788, welches Problem bekommst du? Was meinst du damit , zwei Parameter nicht zu akzeptieren ? Wer akzeptiert nicht? Erhalten Sie eine Fehlermeldung? Wird Ihre Controller-Aktion nicht getroffen? Erhalten Sie falsche Werte? Sei genau.
Darin Dimitrov
Wenn ich zwei Parameter gebe, trifft die Aspx-Seite nicht einmal den Controller. Es findet den Fehler auf der Seite selbst. Ich habe eine Defalut-Ausnahme namens etwas, das abgenutzt ist. der aspx geht dorthin
user787788
@ user787788, was ist der Fehler? Genaue Nachricht, die Sie erhalten?
Darin Dimitrov
Der Fehler ist, dass Sie möglicherweise die Adresse (URL) falsch eingegeben haben.
user787788
2
@DarinDimitrov, ich weiß, dass dies ein sehr alter Beitrag ist, aber ich habe gesehen, dass Sie online waren. Ich nehme nicht an, dass Sie wissen, wie man einen Parameter dynamisch übergibt (nicht fest codiert wie "John")?
8

Dies funktioniert für MVC 5:

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

Sie können eine private Sammlung mit dem Namen HttpValueCollection zurückgeben, auch wenn in der Dokumentation angegeben ist, dass es sich um eine NameValueCollection mit dem Dienstprogramm ParseQueryString handelt. Fügen Sie dann die Schlüssel manuell hinzu. HttpValueCollection übernimmt die Codierung für Sie. Und dann hängen Sie den QueryString einfach manuell an:

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

Hier ist eine andere einfache Möglichkeit, dies zu tun

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

Wo @Model.IDist ein Parameter

Und hier gibt es ein zweites Beispiel.

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