views:

108

answers:

2

I need to render a URL for a JavaScript search that I am doing. Unfortunately Url.Action renders not only the action but the current id. This occurs when presently on page utilizing the action with the id.

To illustrate Url.Action("List", "Org"); will first render Org/List from which I can append an org to be listed. However, after the location has been moved to Org/List/12345 Url.Action("List", "Org"); will render Org/List/12345 and appending to that creates an issue where I end up with Org/List/12345/6789.

Is there a different method I can use other than Url.Action? I've thought about using JavaScript to check for the number of / and removing part of the string but that seems a bit 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;
    });
});
A: 

You could 'cheat' and access the 'Controller' and 'Action' entries in the Routing Dictionary. This would then allow you to construct only the part of the url you need. The only caveat is that if you change your routing model these routines may become incorrect.

Chris Arnold
+4  A: 

Couple of suggestions:

What happens if you use Url.Action("Find", "Org", new { id = "" })?

Alternately, try manually building the url with Url.Content("~/Find/Org").

womp
`Url.Action("Find", "Org", new { id = "" })` did the trick. Should have been so very obvious!
ahsteele
Nice. Hadn't tried it myself so I wasn't sure, but it does use Routing internally, so I thought it might override whatever behavior was causing it to grab the current id.
womp