将javascript变量传递给ASP MVC中的@ Url.Action

时间:2017-10-19 12:20:51

标签: javascript jquery ajax asp.net-mvc-4 asp.net-mvc-partialview

在我看来,我在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>

1 个答案:

答案 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