有人可以建议如何在Jquery中使用@ URL.Action(“name”,“controller”,parameters}吗? 或者atleat获取主目录的相对根。
我必须使用JQuery get使用以下代码。
$(".ag").click(function () {
var id = this.id.replace("message_", "");
var cd = this.id.replace("message_", "display_message_");
$.get("/MRN/_Details_Message", function (data, status) {
document.getElementById(cd).innerHTML = "Data: " + data + "\nStatus: " + status;
});
});
问题是,如果您的JS文件是独立的,则不能使用@URL.Action
,如果您使用谷歌示例,则在使用MVC的相对HTML路径时总会抱怨。
答案 0 :(得分:3)
一个简单的解决方案是将url作为相关html元素的属性。
<a href="#" class="ag" data-url="@Url.Action("ActionName")">Click Here</a>
在jQuery代码中,您可以轻松地引用它:
$(".ag").click(function (e) {
var url = $(this).data("url");
});
答案 1 :(得分:1)
我创建了一个非常简单的MVC控制器来公开你需要从javascript访问的路由。你可以在我的GitHub上找到它 - &gt; https://github.com/tucaz/JSRouteController
答案 2 :(得分:1)
我遇到过类似的问题。如果您的JavaScript位于不同的文件中(我假设),我只是创建了一个全局函数来处理它,即如果您知道相对路径的一部分:
function getPath(p) {
var path = "";
if (window.location.href.indexOf("/MRN") > -1) {
path = "/MRN";
}
if (path.indexOf("/", path.length - 1) !== -1) {
return path + p;
} else {
return path + "/" + p;
}
}
可能不是最好的解决方案,但它适用于我的项目。
答案 3 :(得分:0)
一种方法是将url作为参数传递,并将所有有趣的Url渲染为页面的一部分。像
这样的东西在页面上:
...var detailsUrl = '@Url.Action(....)';
在JavaScript中:
$(".ag").click(function () {
var resultSelector = this.data("resultselector");
$.get(detailsUrl , function (data, status) {
$(resultSelector).html("Data: " + data + "\nStatus: " + status);
});
});
答案 4 :(得分:0)
我喜欢这样做,假设“MRN”是你的控制器而“_Details_Message”是你的行动:
$.get('@Url.Action("_Details_Message", "MRN")', function (data, status) {
document.getElementById(cd).innerHTML = "Data: " + data + "\nStatus: " + status;
});
这会将根操作嵌入到您的javascript中,并将“/ MRN / _Details_Message”嵌入正确的根目录。