Ссылка на объект требуется для нестатического поля, метода или свойства. Произошла ошибка, поскольку вы вызываете Controller.Response
из метода, который имеет тип возврата void
вместо ActionResult
,
Сначала удалите внутренний класс Program
и переименуйте метод Main()
в другое имя (также при необходимости удалите static
).Похоже, код включает в себя метод Main()
, ранее использовавшийся в консоли / приложении WinForms, и вы должны изменить его, чтобы избежать путаницы.
Во-вторых, удалите использование Response
и используйте FileResult
, чтобы вернуть файл для загрузки какв следующем примере:
public FileResult SetDataExcel(object obj)
{
GridView grid = new GridView();
grid.AutoGeneratedColumns = true; // automatically generate all columns from data source
grid.DataSource = result;
StringWriter strwritter = new StringWriter();
HtmlTextWriter htmltextwrtter = new HtmlTextWriter(strwritter);
grid.RenderControl(htmltextwrtter);
string path = Server.MapPath("~/path/to/filename.xls");
using (var sw = new StreamWriter(path))
{
sw.Write(strwriter.ToString());
}
var savedFile = new FileStream(path, FileMode.Open);
return File(savedFile, "application/ms-excel");
}
Наконец, вы можете использовать перенаправление для вызова SetDataExcel
, который возвращает файл:
public ActionResult GetAprovedForPay(DateTime? fi = null, DateTime? ff = null)
{
var result = _repo.GetAprovedForPay(fi, ff);
return RedirectToAction("SetDataExcel", new { obj = result });
}
Примечание: Относительно привязки данных дляGridView
, если для AutoGeneratedColumns
установлено значение true, то вы можете использовать ds.Tables[0]
в качестве источника данных (см. Ссылку здесь ):
string inline = ConfigurationSettings.AppSettings["ConectionString"];
using (SqlConnection toConect = new SqlConnection(inline))
{
using (SqlCommand cmd = new SqlCommand("DaReport", toConect))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add(new SqlParameter("@StartDate", SqlDbType.DateTime));
cmd.Parameters.Add(new SqlParameter("@EndDate", SqlDbType.DateTime));
using (SqlDataAdapter adp = new SqlDataAdapter(cmd))
{
DataSet ds = new DataSet();
adp.Fill(ds);
grid.DataSource = ds.Tables[0];
grid.DataBind();
}
}
}