首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JQuery中使用ASP.NET MVC Url.Action生成链接

在JQuery中使用ASP.NET MVC Url.Action生成链接
EN

Stack Overflow用户
提问于 2011-05-08 08:06:52
回答 2查看 6K关注 0票数 2

我正在生成这样的链接列表:

代码语言:javascript
复制
$('#latestNews').append('<li><a href="<%= Url.Action("Details", "Article") %>/' + key + '">' + val + '</a></li>');

在索引页面链接上,如下所示:

代码语言:javascript
复制
<a href="/En/Article/Details/6">Title</a>

但是,在/En/ page /Details/6页面上生成的链接如下:

代码语言:javascript
复制
<a href="/En/Article/Details/6/6">Title</a>

我尝试过$('#latestNews').append('<li><a href="<%= Url.Action("Details", "Article") %>?id=' + key + '">' + val + '</a></li>'); --它可以正常工作,但是缓存不起作用。

我的控制器代码:

代码语言:javascript
复制
[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)
{..}

我的路线:

代码语言:javascript
复制
routes.MapRoute(
                "Default", 
                "{language}/{controller}/{action}/{id}",
                new { language = "En", controller = "Home", action = "Index", id = UrlParameter.Optional } 
            );

那么,如何更好地生成Url呢?

更新:

代码语言:javascript
复制
 $.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");
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-08 11:41:54

您的key & val变量在JavaScript中,所以这将无法与Url一起工作。您可以将脚本更改为如下所示:

编辑:修正错误-将{id = null}更改为{ id = String.Empty }

代码语言:javascript
复制
 $.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作为锚点的文本。

我认为这是在不过多重构代码的情况下最简单的方法。

票数 3
EN

Stack Overflow用户

发布于 2011-05-08 08:27:48

生成链接的更好方法是将id直接传递给Action方法(而不是手动添加)。更好的方法是使用ActionLink而不是Action方法:

代码语言:javascript
复制
$('#latestNews').append('<li><%= Url.ActionLink(val, "Details", "Article", new { Id = key }, null) %></li>');
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5926334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档