将 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