我有一个锚标记,该标记带有onclick上的javascript函数,调用我的方法以通过Ajax更新页面。
该页面显示了订单的详细信息,而ajax更新显示了详细订单的位置。
问题是:如何动态生成和传递URL?
这是我的锚标签:
<a class="nav-link text-dark text-center p-0 collapsed"
data-toggle="collapse"
data-target="#Details"
aria-expanded="true"
aria-controls="Details"
href="@Url.Page("Area/Details/" + @Model.wItem.GUID, "ShowDetails")"
id="ShowDetails"
onclick="ShowDetailsAjax(this, '@Model.wItem.GUID')">
@item.Position
</a>
这是我的javascript函数:
function ShowPositionAjax(x, _GUID) {
var _url = '';
var _position = x.outerText;
var parameters = "{'position':'" + _position + "','GUID':'" + _GUID + "'}";
$.ajax({
url: _url,
type: 'GET',
cache: false,
async: true,
headers: {
RequestVerificationToken:
$('input:hidden[name="__RequestVerificationToken"]').val()
},
data: parameters
})
.done(function (result) {
$('#MainframeContents').html(result);
});
}
剃刀页面(其锚标记位于),名为Area / Details / 123456-45646-123132(其中123456-45646-123132为GUID)。问题是,我不想对URL进行硬编码,因为GUID可以更改。
我尝试过
href="@Url.Page("Area/Details/" + @Model.wItem.GUID, "ShowDetails")"
但在javascript href中为null。
答案 0 :(得分:1)
我在这里发布解决方案;比发表评论要好。
最初,我使用此href:
href="@Url.Page("Area/Details/" + @Model.wItem.GUID, "ShowDetails")">
使用Url.Page,因为我使用的是Razor而不是MVC。 阅读MS doc(https://docs.microsoft.com/en-us/aspnet/core/mvc/controllers/areas?view=aspnetcore-3.0)时,我注意到我正在使用区域,因此,正确的href应该是:
href='@Url.Page("Details", "ShowDetails", new { area = "Area", position = item.Position, GUID = @Model.wItem.GUID })'
详细信息:是我的页面的名称
ShowDetails :是我的GET处理程序的名称
区域:是我的区域的名称
position 和 GUID :是我的GET处理程序的参数
结果href URL将类似于:
/ en / Area / Details / 45646546-1213-156416-45646-5464666?position = 1&handler = ShowDetails
呼叫我的处理程序的:
public async Task<IActionResult> OnGetShowDetailsAsync(string GUID, string position)
{
...
}
希望这可以节省其他时间。
感谢@Rory McCrossan的建议。
答案 1 :(得分:0)
您可以使用href
属性来执行此操作。您说它对您不起作用,但您还没有显示尝试过的内容。使用attr()
将为您提供所需的值。您似乎还试图在不太正确的GET请求中发送JSON,尤其是当您所需的数据已经在href
URL中时。
还要注意,您应该避免使用onclick
和其他事件属性,因为它们已经过时了。在使用jQuery时,您可以轻松地将事件处理程序毫不干扰地附加。
最后,async: false
是非常糟糕的做法,不应使用。在实现done()
方法之后,无论如何都不需要它。话虽如此,试试这个:
<a class="nav-link text-dark text-center p-0 collapsed"
data-toggle="collapse"
data-target="#Details"
aria-expanded="true"
aria-controls="Details"
href="@Url.Page("Area/Details/" + @Model.wItem.GUID, "ShowDetails")">
@item.Position
</a>
jQuery(function($) {
$('.nav-link').on('click', function(e) {
e.preventDefault(); // stop the standard link behaviour
$.ajax({
url: $(this).attr('href'),
type: 'GET',
cache: false,
headers: {
RequestVerificationToken: $('input:hidden[name="__RequestVerificationToken"]').val()
}
}).done(function(result) {
$('#MainframeContents').html(result);
});
});
});