gcogco10 Ответов: 1

Как вызвать свой метод внутри другого метода в ASP.NET mvc5?


Привет Команда

У меня есть метод ActionResult и его использование [HttpGet] и еще один с помощью [Httpost], теперь задача состоит в том, чтобы найти способ вызвать метод, который позволит моей функции загрузки работать на View. Это означает, что у меня есть кнопка, но функциональность кнопки из представления заключается в загрузке записи моей таблицы. Как я могу достичь этого, используя эту нижеприведенную логику попыток? Я пытался использовать отдельный вид для доступа к этому методу, но мне это не удалось

Что я уже пробовал:

<pre>  [HttpGet]
        public ActionResult SearchPeopleDetails()
        {

            RegCoursesViewModel regCoursesView = new RegCoursesViewModel();
            return View(cb.RegPeopleLists.ToList());
        }


        [HttpPost]
        public ActionResult SearchPeopleDetails(RegCoursesViewModel eNtsaRegistration_2)
        {
            if(ModelState.IsValid)
            {
                eNtsaRegistration_2.regPeopleLists.LoginID = Int32.Parse("SearchValue");
                cb.RegPeopleLists.Add(eNtsaRegistration_2.regPeopleLists);
                cb.SaveChanges();
                return RedirectToAction("Download_DelegateReportData");
            }
            return RedirectToAction("Download_DelegateReportData");
        }

[HttpGet]
      public ActionResult Download_DelegateReport()
  {
      RegCoursesViewModel regCoursesView = new RegCoursesViewModel();

      return View(regCoursesView);
  }

//Downloading the Delegate-Information as Excel-Report.

        public void Download_DelegateReportData()
        {
            var _cb = new eNtsaRegistration_2();

            var data = (from q in _cb.RegPeopleLists
                        select new { 
                        LoginID = q.LoginID,
                        Name = q.Name,
                        SSID = q.SISID,
                        Role = q.Role,
                        LastActivity = q.LastActivity,
                        TotalActivity = q.TotalActivity

                        }).ToList();
            var b = ConvertToDataTable(data);
            string attachment = "attachment; filename=eNtsaTraining-Registration.xls";
            Response.ClearContent();
            Response.AddHeader("content-disposition", attachment);
            Response.ContentType = "application/vnd.ms-excel";
            string tb = "";

            foreach (DataColumn dc in b.Columns)
            {
                Response.Write(tb + dc.ColumnName);
                tb = "\t";
            }
            Response.Write("\n");
            int i;
            foreach (DataRow dr in b.Rows)
            {
                tb = "";
                for (i = 0; i < b.Columns.Count; i++)
                {
                    Response.Write(b + dr[i].ToString());
                    tb = "\t";
                }
                Response.Write("\n");
            }
            Response.End();
        }

1 Ответов

Рейтинг:
0

Richard Deeming

Download_DelegateReportData это не действие, поэтому вы не можете перенаправить на него.

Вы также должны избегать использования Response.Write внутри метода действия. Вместо этого используйте соответствующий результат действия.

И вы отправляете не файл Excel, а файл значений, разделенных табуляцией. Вам нужно использовать правильный тип MIME.

[HttpGet]
public ActionResult Download_DelegateReportData()
{
    using (var cb = new eNtsaRegistration_2())
    {
        var data = (from ... ).ToList();
        var b = ConvertToDataTable(data);
        
        var ms = new MemoryStream();
        using (var writer = new StreamWriter(ms))
        {
            writer.WriteLine(string.Join("\t", b.Columns.Cast<DataColumn>().Select(c => c.ColumnName)));
            foreach (DataRow dr in b.Rows)
            {
                writer.WriteLine(string.Join("\t", dr.ItemArray));
            }
        }
        
        ms.Seek(0L, SeekOrigin.Begin);
        return new FileStreamResult(ms, "text/tab-separated-values") 
        {
            FileDownloadName = "eNtsaTraining-Registration.tsv"
        };
    }
}


gcogco10

Спасибо, Ричард, теперь как я получу доступ к этому методу из моей кнопки на просмотре? буду ли я использовать перенаправление? кнопка должна быть в состоянии загрузить из самого метода формат excel.

Richard Deeming

Так же, как вы называете любое другое действие. Если ваша кнопка отправляет форму, она может либо указывать непосредственно на действие загрузки, либо действие, которое она отправляет, может перенаправить вас на действие загрузки. Если вы используете <a> вместо этого вы можете установить его элемент. href чтобы указать непосредственно на действие загрузки.

gcogco10

Мой должен загрузиться, это моя передняя кнопка в bootstrap.



Скачать Excel