如何在MVC 4中提示用户从localhost保存访问文件#c

时间:2015-06-30 00:02:02

标签: c# asp.net-mvc

我试图提示用户在按钮点击时保存访问数据库文件。

以下是我的控制器和视图。

控制器:

public ActionResult BlankTemplate(string startyear, string endyear)
        {
         try
            {
             blankTemplateFile = "C:\\BlankTemplate\\PTPKCalc_BlankTemplate.accdb";                                         
             string saveAsFileName = blankTemplateFile;        
             System.IO.File.Copy(saveAsFileName, blankTemplateFile + "\\" + Strings.Mid(saveAsFileName, Strings.InStrRev(saveAsFileName, "\\") + 1));  
             byte[] fileBytes = System.IO.File.ReadAllBytes("C:\\BlankTemplate\\PTPKCalc_BlankTemplate.accdb");
             string fileName = "PTPKCalc_BlankTemplate.accdb";
             Response.AddHeader("Content-Disposition", fileName);
             return File(fileBytes, System.Net.Mime.MediaTypeNames.Application.Octet, fileName);
            }
            catch { }
                return null;   
        }

查看:

    <table cellpadding="0" cellspacing="0" border="0" style="width: 100%;">
                        <tr>
                            <td style="width: 60%">
                                Start Year:<br />
                                @(Html.Kendo().Calendar()
                                            .Name("startcalendar"))
                            </td>
    </table>

   <script>
<script>
    BlankTemplate = function () {
        var start = $("#startcalendar").data("kendoCalendar");
        var end = $("#endcalendar").data("kendoCalendar");

        var startyear = kendo.parseDate(start.value())
        var endyear = kendo.parseDate(end.value(), "G")
        $.ajax({
            url: _rootUrl + "KcalcImport/BlankTemplate",
            data: {
                startyear: kendo.toString(new Date(startyear), "d"),
                endyear: kendo.toString(new Date(endyear), "d"),
                templatetype: "blanktemplate"
            },         
        });
    }
</script>

只需尝试提示用户保存此访问数据库模板。

1 个答案:

答案 0 :(得分:0)

您不应该尝试使用AJAX下载文件。而只是从表单中的按钮进行常规POST。用HttpPost修饰你的动作方法。

[HttpPost]
public ActionResult BlankTemplate(string startyear, string endyear)
{
    // put the code you had before here and return a FileResult
}

然后只需使用带有提交按钮的常规旧表单即可获取它。由于您需要从日历中获取日期,因此您必须执行一些jQuery来获取它们并将它们打入隐藏字段。

在您看来:

@using (Html.BeginForm("BlankTemplate", "ControllerName", FormMethod.Post, new { @id = "accessForm" }))
{
    @Html.Hidden("startyear", "", new { id = "startyear" })
    @Html.Hidden("endyear", "", new { id = "endyear" })
    <input type="submit" value="Submit" /> 
}

和jQuery:

<script>
    $(function () {
        $("#accessForm").submit(function () {
            var start = $("#startcalendar").data("kendoCalendar");
            var end = $("#endcalendar").data("kendoCalendar");

            $("#startyear").val(kendo.parseDate(start.value()));
            $("#endyear").val(kendo.parseDate(end.value(), "G"));
        });
    });
</script>