将Javascript变量添加到asp-route-data

时间:2018-12-10 20:41:04

标签: javascript c# jquery asp.net razor

我有一个asp动作,其中有多个参数需要传递给控制器​​。某些变量可以根据页面上的操作而更改,例如,我有一个日期选择器,因此用户可以选择他们想要的日期。

当他们更改日期时,该日期将另存为Javascript变量。

<script>
     $('#pvHistoricalDates').on('change', '#date', function (ev, picker) {
            date = $(this).find("option:selected").val();
     });
</script>

无论如何,我是否有将这个变量值插入到以下asp动作中而无需创建URL的唯一方法。我知道该解决方案,但我很好奇能否直接将其作为变量插入。

<a asp-action="LoadData" asp-route-account="@Model.Account" asp-route-date="???">Button</a>

1 个答案:

答案 0 :(得分:1)

剃刀视图中的标记助手在服务器上执行,其结果(HTML标记)将发送到浏览器,浏览器将呈现它。因此,此时,anhcor标签帮助程序已经生成了链接的href属性值。

您可以做的是,使用JavaScript覆盖常规的链接单击行为,从页面中读取输入元素值,然后使用该值来构建新的URL并导航到该URL。

您可以为日期参数指定一个虚拟值。我还为锚标签赋予了Id属性,我将在稍后将其用于jQuery选择器。

<a  id="btn" asp-action="LoadData" asp-route-account="@Model.Account" 
                                   asp-route-date="dummyDate">Button</a>

以及您的JavaScript中(这里我使用的是jQuery,但是您可以在JavaScript中执行相同的操作)

$(function (){

    $("#btn").click(function (e) {
        // Stop the normal navigation
        e.preventDefault(); 

        //Build the new URL
        var url = $(this).attr("href");
        var date = $("#date").val();
        url = url.replace("dummyDate", date);

        //Navigate to the new URL
        window.location.href = url;

    });
});