2010-01-18 3 views
6

Ich muss eine URL für eine JavaScript-Suche, die ich mache rendern. Leider Url.Action rendert nicht nur die Aktion, sondern die aktuelle ID. Dies tritt auf, wenn gerade auf der Seite die Aktion mit der ID verwendet wird.Url.Action nur Controller und Aktion, aber nicht ID

Zur Veranschaulichung Url.Action("List", "Org"); wird zuerst rendern Org/List, von denen ich eine Organisation anfügen kann aufgeführt werden. Nachdem der Standort jedoch verschoben wurde, wird Org/List/12345Url.Action("List", "Org"); wird rendern Org/List/12345 und Anhängen an das erstellt ein Problem, wo ich am Ende mit Org/List/12345/6789.

Gibt es eine andere Methode als Url.Action? Ich habe darüber nachgedacht, JavaScript zu verwenden, um nach der Nummer von / zu suchen und einen Teil der Zeichenkette zu entfernen, aber das scheint ein bisschen hackish.

// appears in my Site.Master & utilizes the AutoComplete plugin for jQuery 
$(document).ready(function() { 
    $("input#FindOrg").autocomplete('<%= Url.Action("Find", "Org") %>', { 
     minChars: 3, 
     maxItemsToShow: 25 
    }).result(function(evt, data, formatted) { 
     var url = '<%= Url.Action("List", "Org") %>/'; 
     window.location.href = url + data; 
    }); 
}); 

Antwort

12

paar Anregungen:

Was passiert, wenn Sie Url.Action("Find", "Org", new { id = "" }) geschieht verwenden?

Alternativ können Sie versuchen, die URL manuell mit Url.Content("~/Find/Org") zu erstellen.

+0

'Url.Action (" Finden "," Org ", neu {id =" "})' hat den Trick gemacht. Sollte so offensichtlich gewesen sein! – ahsteele

+0

Schön. Hatte es nicht selbst versucht, also war ich mir nicht sicher, aber es benutzt intern Routing, also dachte ich, es könnte jedes Verhalten außer Kraft setzen, das es veranlasste, die aktuelle ID zu erfassen. – womp

0

Sie könnten 'betrügen' und Zugriff auf die 'Controller' und 'Action' Einträge in der Routing-Wörterbuch. Dadurch können Sie nur den Teil der URL erstellen, den Sie benötigen. Die einzige Einschränkung ist, dass diese Routinen möglicherweise falsch werden, wenn Sie Ihr Routing-Modell ändern.