【发布时间】:2020-09-10 22:23:14
【问题描述】:
我正在运行 Asp.Net Core 3.1 应用程序,其中我在布局中有一个左侧菜单,我通过局部视图加载。
要设置菜单链接,我使用了如下锚标记:
var allRouteData = new Dictionary<string, string>
{
{ "menuid", mID.ToString() },
{ "isCalledByMenu", "true" },
{ "where", "tab" }
};
<a class="@clas" data-ajax="true" data-ajax-complete="RedirectToPage('@M.MenuUrl', '@M.MenuName',true)" data-ajax-mode="replace" data-ajax-update="#myTab" asp-action="GetSubMenu" asp-controller="Base" asp-all-route-data="@allRouteData">@M.MenuName</a>
因此,当页面加载时,HTML 生成如下:
<a class="nav-link btn fuse-ripple-ready" data-ajax="true" data-ajax-complete="RedirectToPage('/OrgOverview/ProfessionalServices', 'Professional Services',true)" data-ajax-mode="replace" data-ajax-update="#myTab" href="/Base/GetSubMenu?menuid=9630&isCalledByMenu=true&where=tab">Professional Services</a>
下面是使用的动作方法:
public IActionResult GetSubMenu(int menuid, bool? isCalledByMenu, string where = null)
{
return ViewComponent("SubMenu", new { menuid = menuid, isCalledByMenu = isCalledByMenu, where = where });
}
在顶部的布局页面中,我分配了标签助手:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
但是当我点击链接时,它并没有点击这个动作方法。 更新:当我点击菜单时,它首先点击了 javascript 中的列表,我在其中进行了一些 ajax 调用:
$('#myTab>li>a.nav-link.btn.fuse-ripple-ready').on("click", function (e) {
e.preventDefault();
var requestedPage = $(this).text();
SetCurrentPageNameSession(requestedPage, false);// ajax call to set some value.
return true;
});
在 SetCurrentPageNameSession 方法中,我执行 ajax 调用以在调用操作方法之前将服务器端的菜单名称设置为某个会话。 如下:
function SetCurrentPageNameSession(CurrentPage, IsBookMark) {
if (IsBookMark==undefined)
IsBookMark = false;
var url = baseUrl+"Manage/HighlightCurrentMenu/"
$.ajax({
type: "POST",
data: { CurrentPage: CurrentPage, IsBookMark: IsBookMark },
url: url,
dataType: "json",
async:false,
success: function (data) {
var res = data.d;
},
error: function (xhr, ajaxOptions, thrownError) {
}
});
}
然后在它锚标记之后调用action方法。
请提出建议。
【问题讨论】:
-
您是否在
BaseController中进行了操作? -
@MichaelWang,我在这里展示的动作方法仅在基本控制器中。
-
返回 404 吗?
-
不,它既不是重定向页面也不是加载页面,没有任何反应,我验证了控制台选项卡也没有发现任何错误或警告。
-
@MichaelWang,正如您建议使用 Route 属性,我只是从操作方法中删除 Route 属性并复制完整的 url 并粘贴到浏览器选项卡中,发现它就像是在点击操作方法但是当点击在没有点击它的链接上。请提出建议。
标签: c# html asp.net-core