Javascript ASP.NET Core 3.0 Razor页面使用@url.Page为AJAX生成动态href url
我有一个锚定标记,它通过onclick上的javascript函数调用我的方法,通过Ajax更新页面 页面显示订单的详细信息,ajax更新显示详细订单的位置 问题是:如何动态生成和传递URL 这是我的锚标签:Javascript ASP.NET Core 3.0 Razor页面使用@url.Page为AJAX生成动态href url,javascript,jquery,ajax,asp.net-core,razor-pages,Javascript,Jquery,Ajax,Asp.net Core,Razor Pages,我有一个锚定标记,它通过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-co
<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>
razor页面(其中锚定标记为)命名为Area/Details/123456-45646-123132(其中123456-45646-123132是GUID)。问题是,我不想硬编码url,因为GUID可以更改
我试过了
href="@Url.Page("Area/Details/" + @Model.wItem.GUID, "ShowDetails")"
但是在javascript中href为空。您可以使用
href
属性来执行此操作。你说这对你不起作用,但你还没有表现出你的努力。使用attr()
将获得所需的值。您似乎还试图在GET请求中发送JSON,但这并不完全正确,尤其是当您需要的数据已经在href
URL中时
还请注意,应避免使用onclick
和其他过时的事件属性。在使用jQuery时,您可以轻松地以不引人注目的方式附加事件处理程序
最后,async:false
是非常糟糕的做法,不应该使用。在任何情况下都不需要它,因为您已经实现了done()
方法。说了这么多,试试这个:
jQuery(函数($){
$('.nav link')。在('click',函数(e)上{
e、 preventDefault();//停止标准链接行为
$.ajax({
url:$(this.attr('href'),
键入:“GET”,
cache:false,
标题:{
RequestVerificationToken:$('input:hidden[name=“\uu RequestVerificationToken”]”)val()
}
}).完成(功能(结果){
$('#MainframeContents').html(结果);
});
});
});
我在这里发布解决方案;这比发表评论要好
我最初使用这个href:
href="@Url.Page("Area/Details/" + @Model.wItem.GUID, "ShowDetails")">
因为我使用的是Razor而不是MVC。
阅读MS doc()时,我注意到我使用的是区域,因此,正确的href应该是:
href='@Url.Page("Details", "ShowDetails", new { area = "Area", position = item.Position, GUID = @Model.wItem.GUID })'
详细信息:是我的页面的名称
ShowDetails:是我的GET处理程序的名称
区域:是我所在区域的名称
位置和GUID:是我的GET处理程序的参数
结果href URL如下所示:
/en/Area/Details/4564646-1213-156416-45646-5464666?位置=1,处理器=显示详细信息
那叫我的处理人:
public async Task<IActionResult> OnGetShowDetailsAsync(string GUID, string position)
{
...
}
公共异步任务OnGetShowDetailsAsync(字符串GUID,字符串位置)
{
...
}
希望这能为其他人节省时间
感谢@Rory McCrossan的建议。我已经复制并通过了您的代码,但是$(this).attr('href')未定义。我不使用async:false,而是使用async:true。我无法复制它,这个逻辑工作正常:。检查以确保您的HTML是有效的。我没有使用MVC,这就是为什么我使用页面而不是操作。我将检查html代码搜索为什么href在我的代码中未定义。啊,是的。对不起,我没看到标签
public async Task<IActionResult> OnGetShowDetailsAsync(string GUID, string position)
{
...
}