使用JQuery(MVC)在剃刀视图中填充全局变量

时间:2016-11-10 10:33:03

标签: c# jquery asp.net-mvc razor

请参阅以下代码:

@{
    var propertyList = new List<Tuple<string, string>>();
}

<input type="text" data-id="@item.Item1" class="form-control prop"/>

<a class="btn btn-default" id="run-report" href="@Url.Action("RunReport", "Reports", new {reportId = Model.ReportId, propList = propertyList})"> Run Report</a>

<script>
    $("#run-report").click(function () {
        $(".prop").each(function () {
            var currentProp = $(this).attr("data-id");
            var currentPropVal = (this).value;

            @{
                propertyList.Add(new Tuple<string, string>("", ""));
            }

        });
    });

</script>

如上所示,我有一个名为propertyList的全局变量,其中包含元组列表<string, string>

我在此声明这一点,因为我需要使用Url.Action从控制器操作直接将报告下载到浏览器。

当我从文本框中获取值时,我遇到了一些问题。我需要将我的jQuery中的值添加到我的全局元组列表中。

看起来我不能这样做。

非常感谢任何建议!

由于

1 个答案:

答案 0 :(得分:1)

请记住,@{}代码在服务器端运行,因此在它到达浏览器之前。一旦它'#34;呈现&#34;在浏览器中,它好像是纯文本,无法更改。

您可以通过在脚本中构建参数来传递参数,例如:

从Url.Action参数中删除参数

<input type="text" data-id="@item.Item1" class="form-control prop"/>
<a class="btn btn-default" id="run-report" href="@Url.Action("RunReport", "Reports", new {reportId = Model.ReportId})"> Run Report</a>

通过脚本添加它们

$("#run-report").click(function () {

    var url = $(this).attr("href");

    $(".prop").each(function () {
        var currentProp = $(this).data("id");
        var currentPropVal = (this).value;

        url += "?" + currentProp + "=" + currentPropVal;
    });

    location.href = url;
});

根据您的操作所需的格式,您可能需要更改网址的构建方式,但这显示了原则。