当用户单击Html.ActionLink ,我需要调用一个控制器方法,该方法将为该用户下载csv报告。 我还需要将此控制器中两个输入框的值传递给该控制器,以表示它们要查找的开始和结束日期范围。
目前,我可以使用jQuery分配Html.ActionLink参数,但是它们没有将其返回给控制器。 控制器方法中的两个参数都用null值实例化。
我也不能使用表单/提交方法,因为已经在此特定表单上使用了该方法,以允许用户在导出到csv之前查看请求的日期范围内的数据。
jQuery的
$(document).ready(function() {
$('#startDate').change(function () {
$('a').attr('start', $(this).val());
});
$('#endDate').change(function () {
$('a').attr('end', $(this).val());
});
});
ASP MVC 3视图
@using (Html.BeginForm())
{
@Html.TextBox("startDate", ViewBag.StartDate as string, new { placeholder = " Start Date" })
@Html.TextBox("endDate", ViewBag.EndDate as string, new { placeholder = " End Date" })
@Html.ActionLink("Export to Spreadsheet", "ExportToCsv", new { start = "" , end = ""} )
@ViewBag.ErrorMessage
}
控制器方式
public void ExportToCsv(string start, string end)
{
var grid = new System.Web.UI.WebControls.GridView();
var banks = (from b in db.AgentTransmission
where b.RecordStatus.Equals("C") &&
b.WelcomeLetter
select b)
.AsEnumerable()
.Select(x => new
{
LastName = x.LastName,
FirstName = x.FirstName,
MiddleInitial = x.MiddleInitial,
EffectiveDate = x.EffectiveDate,
Status = x.displayStatus,
Email = x.Email,
Address1 = x.LocationStreet1,
Address2 = x.LocationStreet2,
City = x.LocationCity,
State = x.LocationState,
Zip = "'" + x.LocationZip,
CreatedOn = x.CreatedDate
});
grid.DataSource = banks.ToList();
grid.DataBind();
string style = @" ";
Response.ClearContent();
Response.AddHeader("content-disposition", "attachment; filename=WelcomeLetterOutput.xls");
Response.ContentType = "application/excel";
StringWriter sw = new StringWriter();
HtmlTextWriter htw = new HtmlTextWriter(sw);
grid.RenderControl(htw);
Response.Write(style);
Response.Write(sw.ToString());
Response.End();
}