Создать ссылку в JQuery с помощью ASP.NET MVC Url.Action - PullRequest
2 голосов
/ 08 мая 2011

Я создаю список ссылок следующим образом:

$('#latestNews').append('<li><a href="<%= Url.Action("Details", "Article") %>/' + key + '">' + val + '</a></li>');

А на странице указателя ссылка выглядит так:

<a href="/En/Article/Details/6">Title</a>

Но на / En / Article /Подробно / 6 страница - сгенерированная ссылка выглядит так:

<a href="/En/Article/Details/6/6">Title</a>

Я пробовал $('#latestNews').append('<li><a href="<%= Url.Action("Details", "Article") %>?id=' + key + '">' + val + '</a></li>'); Работает нормально, но не работает кэширование.

Код моего контроллера:

[OutputCache(Duration = Int32.MaxValue, VaryByParam = "id,language", SqlDependency = "database:Articles")] //Articles will be added rarely so i think it'll be nice to cache them
public ActionResult Details(string id, string language)
{..}

Мой маршрут:

routes.MapRoute(
                "Default", 
                "{language}/{controller}/{action}/{id}",
                new { language = "En", controller = "Home", action = "Index", id = UrlParameter.Optional } 
            );

Итак, как лучше создать URL?

ОБНОВЛЕНО:

 $.post('<%= Url.Action("GetLatest", "News") %>', function (data) {               
                $.each(data, function (key, val) {
                    $('#latestNews').append('<li><%= Url.ActionLink(val, "Details", "Article", new { id = key }, null) %></li>');                    
                });
                $('#news').show();
            }, "json");

Ответы [ 2 ]

3 голосов
/ 08 мая 2011

Ваши переменные key и val представлены в JavaScript, поэтому они не будут работать с Url Helper.Вы можете изменить свой скрипт так, чтобы он выглядел примерно так:

РЕДАКТИРОВАТЬ: исправлена ​​ошибка - изменено {id = null} на {id = String.Empty}

 $.post('<%= Url.Action("GetLatest", "News") %>', function (data) {               
                $.each(data, function (key, val) {
                    $('#latestNews').append('<li><a href="<%= Url.Action("Details", "Article", new { id = String.Empty}) %>/' + key +'">' + val + '</a></li>');                    
                });
                $('#news').show();
            }, "json");

Итак, метод MVC Url.Action () просто дает вам первую часть URL.Затем jQuery добавит key в конец URL-адреса и добавит val в качестве текста для привязки во время выполнения.

Я думаю, что это самый простой способ сделать это без чрезмерного рефакторинга кода.

0 голосов
/ 08 мая 2011

Лучший способ создать ссылку - передать id напрямую методу Action (а не добавлять его вручную).Еще лучше использовать ActionLink вместо Action метод:

$('#latestNews').append('<li><%= Url.ActionLink(val, "Details", "Article", new { Id = key }, null) %></li>');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...