【发布时间】:2017-02-08 17:14:20
【问题描述】:
已经有一些类似的问题,但它们不包括使用模型中的值作为参数发送给控制器。
Make DIV containing AJAX ActionLink clickable
在 Razor 视图中考虑以下代码:
@foreach (var item in Model)
{
<div class="itemDisplay">
<img src="~/Images/@item.DisplayImage" />
@Ajax.ActionLink($"Item {item.Id}", "_ItemDisplay", new { id = item.Id }, new AjaxOptions { UpdateTargetId = "itemDisplay", LoadingElementId = "ajax-loader", InsertionMode = InsertionMode.Replace, HttpMethod = "GET" }, null)
</div>
}
我想要实现的是将ActionLink 应用于整个DIV。
应用任何 JavaScript 解决方案时的问题是,我遇到了无法在 Razor 代码中使用 JavaScript 变量的问题(因为一个是客户端,另一个是服务器端)。
例如:
function updateItemDisplay(itemId) {
$('#itemDisplay')
.click(function () {
$.ajax({
url: '@Url.Action("_ItemDisplay", new { id = *cannot use a JS variable here!* })',
type: "GET",
success: function (result) {
$('#itemDisplay').html(result);
}
});
});
};
所以我的问题是,使用ASP.Net MVC,我如何从 DIV 标签进行 AJAX 调用并将相关 ID 传递给控制器?
【问题讨论】:
-
排序答案是否定的。
Ajax.ActionLink()是一种生成<a>标记的方法。但是,当您可以使用$.ajax()方法时,您为什么要使用Ajax.ActionLink()(它现在实际上已经过时了——它不受asp.net-core-mvc 团队的支持),它给您更多的灵活性。 -
但不清楚您想在这里做什么-第一个 sn-p 中的代码使用
Ajax.ActionLink()生成基于item.Id的url,这是一个服务器端值-没有javascript该代码中使用的变量。如果您确实想在$.ajax()方法中使用 javascript 变量,那么它只是var url = '@Url.Action("_ItemDisplay")' + '/' + yourVariable;(假设您使用默认路由),或var url = '@Url.Action("_ItemDisplay")' + '?id=' + yourVariable; -
@Stephen 谢谢,我没有考虑以您描述的方式使用 Url.Action。这完美地解决了我的问题。如果您想将其输入到我会接受的答案中。
-
针对关闭标志稍微编辑了问题。
-
仍然不清楚你的 javascrpt 变量来自哪里
标签: javascript c# ajax asp.net-mvc razor