呼叫控制器's方法

Calling Controller's method from Javascript in View

本文关键字:方法 呼叫控制 控制器 呼叫      更新时间:2023-09-26

我正试图通过View 中的Javascript访问控制器中的一个方法

<div id="Historicaldata">
    From Date <input type="date" id="fromDate" /> To Date <input type="date" id="toDate" />
    <a href="#" id="ExportExcel" onclick="GetFromDate()">Export to Excel</a>
</div>
<script>
    function GetFromDate() {
        var dt1 = document.getElementById('fromDate').value;
        var dt2 = document.getElementById('toDate').value;
        var url = "~/GeneralStatics/Excel/" + "startdate=" + dt1 + "/endDate=" + dt2;
        alert(url);
            window.location.href = this.href + "startDate=" + document.getElementById('fromDate').value + "&endDate=" + document.getElementById('toDate').value;
            return false;
    };
</script>

在我的控制器中有这样的避免方法:

 public void Excel(DateTime startDate, DateTime endDate)

通过它可以下载Excel文件。最好的方法是什么?是否可以在不重定向的情况下进行?

您不需要javascript,可以将输入字段放在HTML表单中:

@using (Html.BeginForm("Excel", "SomeControllerName", FormMethod.Post))
{
    <div id="Historicaldata">
        From Date <input type="date" name="startDate" /> 
        To Date <input type="date" name="endDate" />
        <button type="submit">Export to Excel</button>
    </div>
}

还要确保您的操作参数与输入字段的名称匹配,不要忘记在ASP.NET MVC中,柔术操作必须返回ActionResults,而不是void:

public ActionResult Excel(DateTime startDate, DateTime endDate)
{
    ...
}

使用AJAX下载文件:

$.ajax({
     url: '@Url.Action("Excel", "GeneralStatics")',
     contentType: 'application/json; charset=utf-8',
     datatype: 'json',
     type: "GET",
     success: function () {
         window.location = '@Url.Action("Excel", "GeneralStatics", new { @startDate= dt1 , @endDate =  dt2 })';
     }
 });