我正在生成这样的链接列表:
$('#latestNews').append('<li><a href="<%= Url.Action("Details", "Article") %>/' + key + '">' + val + '</a></li>');在索引页面链接上,如下所示:
<a href="/En/Article/Details/6">Title</a>但是,在/En/ page /Details/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");发布于 2011-05-08 11:41:54
您的key & val变量在JavaScript中,所以这将无法与Url一起工作。您可以将脚本更改为如下所示:
编辑:修正错误-将{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作为锚点的文本。
我认为这是在不过多重构代码的情况下最简单的方法。
发布于 2011-05-08 08:27:48
生成链接的更好方法是将id直接传递给Action方法(而不是手动添加)。更好的方法是使用ActionLink而不是Action方法:
$('#latestNews').append('<li><%= Url.ActionLink(val, "Details", "Article", new { Id = key }, null) %></li>');https://stackoverflow.com/questions/5926334
复制相似问题