从View中的Javascript调用Controller的方法

时间:2013-08-21 15:26:06

标签: javascript asp.net-mvc

我正在尝试通过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文件。 做这个的最好方式是什么? 并且可以在没有重定向的情况下进行吗?

2 个答案:

答案 0 :(得分:0)

您不需要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)
{
    ...
}

答案 1 :(得分:0)

使用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 })';
     }
 });