Передача значений JavaScript через ссылку html.action - PullRequest
0 голосов
/ 25 сентября 2018

Я разрабатываю функцию экспорта, где мне нужно передать некоторые значения, доступные в коде javascript, в контроллер через @Html.ActionLink.Обычно пользователь выбирает дату начала, дату окончания и номер фазы, который при нажатии на кнопку экспортирует всю таблицу в Excel.Ниже я прилагаю код js, html, cs файлов.

js code:

    <script type="text/javascript">

        $(document).ready(function () {
            $("#departing").datepicker({ dateFormat: 'yy-mm-dd' });
            $("#returning").datepicker({ dateFormat: 'yy-mm-dd' });
            $("button").click(function () {
                var selected = $("#dropdown option:selected").text();
                var departing = $("#departing").val();
                var returning = $("#returning").val();

            });
        });

 var selPhaseNumber = "A";


    $(document).ready(function () {
        //fetch and bind the year dropdown list
        $('input[type=radio][name=rdbPhase]').change(function () {
            if ($(this).val() == "Phase I") {
                selPhaseNumber = "I";
            }
            else if ($(this).val() == "Phase II") {
                selPhaseNumber = "II";
            }
            else {
                selPhaseNumber = "A";
            }

        })
    })

    </script>

html code:

<div class="col-lg-6">                
<div class="col-lg-3">@Html.ActionLink("Export to Excel", "ExportSubmittedTicketToExcel", "ExportExcel", null, new { @class = "btn btn-primary", @id = "btnExport"})</div>
</div>

(вызов должен быть примерно таким:это) (api/ProjectBilling/SubmittedExportBillDetails/" + startdate + '/' + enddate + '/' + selPhaseNumber)

код контроллера:

[Route("ExportExcel/ExportSubmittedTicketToExcel/")]
        public ActionResult ExportSubmittedTicketToExcel(string MemberName)
        {
            try
            {
                if (System.Web.HttpContext.Current.Session["DisplayName"] != null)
                {
                    List<ExportExcelModelSubmitted> Result = new List<ExportExcelModelSubmitted>();
                    using (var client = new HttpClient())
                    {
                        int UserID = Convert.ToInt32(System.Web.HttpContext.Current.Session["CurrentUserID"]);
                        client.BaseAddress = new Uri(WebApiURL);
                        client.DefaultRequestHeaders.Accept.Clear();
                        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                        HttpResponseMessage response = client.GetAsync("api/ProjectBilling/SubmittedExportBillDetails/" + startdate + '/' + enddate + '/' + selPhaseNumber).Result;

                        if (response.IsSuccessStatusCode)
                        {
                            Result = response.Content.ReadAsAsync<List<ExportExcelModelSubmitted>>().Result;
                        }
                        else
                        {
                            string returncode = response.StatusCode.ToString();
                            return Content("<script language='javascript' type='text/javascript'>alert('" + returncode + "');</script>");
                        }
                    }

                    DataTable dt = new DataTable();
                    dt = Result.ToDataTable();

                    MemoryStream stream = new MemoryStream();
                    using (ExcelPackage pck = new ExcelPackage(stream))
                    {
                        ExcelWorksheet ws = pck.Workbook.Worksheets.Add("BillingDetails");
                        ws.Cells["A1"].LoadFromDataTable(dt, true);
                        ws.Cells.AutoFitColumns();

                        using (ExcelRange rng = ws.Cells[1, 1, 1, dt.Columns.Count])
                        {
                            rng.Style.Font.Bold = true;
                            rng.Style.Fill.PatternType = ExcelFillStyle.Solid;
                            rng.Style.Fill.BackgroundColor.SetColor(System.Drawing.Color.FromArgb(79, 129, 189));
                            rng.Style.Font.Color.SetColor(System.Drawing.Color.White);
                        }
                        pck.SaveAs(stream);
                        Response.Clear();

                        Response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
                        Response.AddHeader("Content-Disposition", "attachment;filename=SubmittedBilling.xls");

                        Response.BinaryWrite(stream.ToArray());
                        Response.End();
                    }

                    return View();
                }
                else
                {
                    return RedirectToAction("Login", "Home");
                }
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

1 Ответ

0 голосов
/ 25 сентября 2018

Вы также можете сделать это с помощью Ajax Call

[Route("ExportExcel/ExportSubmittedTicketToExcel/")]
public ActionResult ExportSubmittedTicketToExcel(datetime startDate,datetime endDate,string phaseNumber)
{   
    //logic
    string fullPath = Path.Combine(Server.MapPath("~/MyFiles"), file);
        return File(fullpath, "application/vnd.ms-excel", file);
}

и

$ajax({
    cache: false,
    url: '/ExportExcel/ExportSubmittedTicketToExcel',
    data: {'startDate':startdate,'endDate':enddate,'phaseNumber':selPhaseNumber}
    success: function (data){
    window.location = data.fullpath;
    }
})
...