在我看来,我在data-url属性中有两个带控制器和操作方法名称的div。当页面加载时,我循环遍历这些div类并获取构造函数和操作方法的名称以传递给ajax调用。但是现在我很难使用@ Url.Action方法生成url来进行ajax调用。有谁知道我如何在@ Url.Action中传递javascript变量。在我的代码中,我在partialDivUrl变量中设置data-url值。现在在我的ajax调用中,我希望能够执行@ Url.Action(partialDivUrl)或类似于此的创建正确URL的内容。我正在尝试加载局部视图,请不要建议使用@ Html.Action,@ Html.Partial或@ Html.Render..etc ..因为动作方法是异步方法。
这是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>
答案 0 :(得分:0)
我认为您需要将Url.Action调用替换为data-url
属性中的硬编码值。
你做@Url.Action(partialDivUrl)
的建议并没有多大意义 - 即使你可以用这种方式动态地将JS变量传递给它,它也不是正确的值。 Url.Action不接受任意URL字符串并尝试验证它,而是接受操作名称和控制器名称,并返回给定操作的正确路由URL字符串。如果用ActionURL生成的URL替换这些硬编码值,那么当ajax运行时,你已经拥有了与被点击的div相关的正确URL。
例如:
<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。