我试图提示用户在按钮点击时保存访问数据库文件。
以下是我的控制器和视图。
控制器:
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>
只需尝试提示用户保存此访问数据库模板。
答案 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>