繁体   English   中英

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

[英]Pass javascript variable to @Url.Action in ASP MVC

在我看来,我在data-url属性中有两个带有控制器和动作方法名称的div。 当页面被加载时,我正在遍历这些div类,并获取构造函数和操作方法的名称以传递给ajax调用。 但是现在我很难使用@ Url.Action方法来生成用于进行Ajax调用的url。 有谁知道我如何在@ Url.Action中传递javascript变量。 在我的代码中,我正在partialDivUrl变量中设置数据URL值。 现在在我的ajax调用中,我希望能够执行@ Url.Action(partialDivUrl)或类似的操作来创建正确的URL。 我正在尝试加载部分视图,请不要建议使用@ Html.Action,@ Html.Partial或@ Html.Render..etc ..,因为action方法是异步方法。

这是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字符串并尝试对其进行验证,而是接受一个操作名称和一个可选的控制器名称,并为给定的操作返回正确路由的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>

假设它们分别是正确的操作和控制器名称-如果不是,则可以将它们更改为应用程序的正确值。

请参阅https://msdn.microsoft.com/zh-cn/library/system.web.mvc.urlhelper.action(v=vs.118).aspx#M:System.Web.Mvc.UrlHelper.Action%28System。有关详细信息,请参见String,System.String%29

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM