将 javascript 变量传递给 ASP MVC 中的@Url.Action
Pass javascript variable to @Url.Action in ASP MVC
在我看来,我有两个 divs 在 data-url 属性中带有控制器和操作方法名称。当页面加载时,我循环遍历这些 div 类 并获取构造函数的名称和操作方法以传递给 ajax 调用。但是现在我很难使用@Url.Action 方法生成url 来进行ajax 调用。有谁知道我如何在@Url.Action 中传递javascript 变量。在我的代码中,我在 partialDivUrl 变量中设置了 data-url 值。现在,在我的 ajax 调用中,我希望能够执行 @Url.Action(partialDivUrl) 或类似的操作来创建正确的 url。我正在尝试加载部分视图,请不要建议使用@Html.Action、@Html.Partial 或@Html.Render..等等,因为操作方法是异步方法。
这里是 html:
<div class="partialContents" data-url="/Work/LoadEmployeePartial"></div>
<div class="partialContents" data-url="/Work/LoadSupervisorPartial"></div>
<script type="text/javascript">
$(document).ready(function (e) {
$(".partialContents").each(function (index, item) {
var partialDivUrl = $(item).data("url");
$.ajax({
url: partialDivUrl, <----- want to use @Url.Action here
type: 'GET',
data: {employeeId: @Model.EmployeeId},
contentType: 'application/json',
success: function (data) {
if (data != null) {
$(item).html(data);
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert("Unexpected error.")
}
});
});
});
</script>
我认为您需要用 Url.Action 调用代替 data-url
属性中的硬编码值。
您关于 @Url.Action(partialDivUrl)
的建议实际上没有意义 - 即使您可以通过这种方式动态地将 JS 变量传递给它,它也不是正确的使用值。 Url.Action 不接受任意 URL 字符串并尝试验证它,而是接受操作名称,以及可选的控制器名称,以及 returns 正确路由的 URL 给定操作的字符串。如果您将这些硬编码值替换为 ActionURL 生成的 URL,那么在 ajax 运行时您已经拥有与div 被点击了。
例如:
<div class="partialContents" data-url='@Url.Action("LoadEmployeePartial", "Work")'></div>
<div class="partialContents" data-url='@Url.Action("LoadSupervisorPartial", "Work")'></div>
假设这些分别是正确的操作和控制器名称 - 您可以将它们更改为适合您的应用程序的正确值,否则。
有关 Url.Action 辅助方法的更多详细信息,请参阅 https://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.action(v=vs.118).aspx#M:System.Web.Mvc.UrlHelper.Action%28System.String,System.String%29。
在我看来,我有两个 divs 在 data-url 属性中带有控制器和操作方法名称。当页面加载时,我循环遍历这些 div 类 并获取构造函数的名称和操作方法以传递给 ajax 调用。但是现在我很难使用@Url.Action 方法生成url 来进行ajax 调用。有谁知道我如何在@Url.Action 中传递javascript 变量。在我的代码中,我在 partialDivUrl 变量中设置了 data-url 值。现在,在我的 ajax 调用中,我希望能够执行 @Url.Action(partialDivUrl) 或类似的操作来创建正确的 url。我正在尝试加载部分视图,请不要建议使用@Html.Action、@Html.Partial 或@Html.Render..等等,因为操作方法是异步方法。
这里是 html:
<div class="partialContents" data-url="/Work/LoadEmployeePartial"></div>
<div class="partialContents" data-url="/Work/LoadSupervisorPartial"></div>
<script type="text/javascript">
$(document).ready(function (e) {
$(".partialContents").each(function (index, item) {
var partialDivUrl = $(item).data("url");
$.ajax({
url: partialDivUrl, <----- want to use @Url.Action here
type: 'GET',
data: {employeeId: @Model.EmployeeId},
contentType: 'application/json',
success: function (data) {
if (data != null) {
$(item).html(data);
}
},
error: function (jqXHR, textStatus, errorThrown) {
alert("Unexpected error.")
}
});
});
});
</script>
我认为您需要用 Url.Action 调用代替 data-url
属性中的硬编码值。
您关于 @Url.Action(partialDivUrl)
的建议实际上没有意义 - 即使您可以通过这种方式动态地将 JS 变量传递给它,它也不是正确的使用值。 Url.Action 不接受任意 URL 字符串并尝试验证它,而是接受操作名称,以及可选的控制器名称,以及 returns 正确路由的 URL 给定操作的字符串。如果您将这些硬编码值替换为 ActionURL 生成的 URL,那么在 ajax 运行时您已经拥有与div 被点击了。
例如:
<div class="partialContents" data-url='@Url.Action("LoadEmployeePartial", "Work")'></div>
<div class="partialContents" data-url='@Url.Action("LoadSupervisorPartial", "Work")'></div>
假设这些分别是正确的操作和控制器名称 - 您可以将它们更改为适合您的应用程序的正确值,否则。
有关 Url.Action 辅助方法的更多详细信息,请参阅 https://msdn.microsoft.com/en-us/library/system.web.mvc.urlhelper.action(v=vs.118).aspx#M:System.Web.Mvc.UrlHelper.Action%28System.String,System.String%29。