যদিও স্ট্যান্ডার্ড অ্যাকশন ফলাফল ফাইলকন্টেন্টআরসাল্ট বা ফাইলস্ট্রিম রেজাল্ট ফাইলগুলি ডাউনলোড করার জন্য, পুনরায় ব্যবহারযোগ্যতার জন্য ব্যবহার করা যেতে পারে, একটি কাস্টম অ্যাকশন ফলাফল তৈরি করা সেরা সমাধান হতে পারে।
উদাহরণ হিসাবে ডাউনলোডের জন্য ফ্লাইতে এক্সেল ফাইলগুলিতে ডেটা রফতানির জন্য একটি কাস্টম অ্যাকশনের ফলাফল তৈরি করি।
এক্সেলসেলস্ট শ্রেণি বিমূর্ত অ্যাকশনারসাল্ট বর্গ উত্তরাধিকার সূত্রে প্রাপ্ত এবং এক্সিকিউটর রেজাল্ট পদ্ধতিটিকে ওভাররাইড করে।
আমরা ডাটাবেল থেকে এক্সেল ফাইল তৈরির জন্য আইইনুমেবল অবজেক্ট থেকে ডেটা টেবিল এবং ক্লোজডএক্সএমএল প্যাকেজ তৈরির জন্য ফাস্টমেমার প্যাকেজটি ব্যবহার করছি।
public class ExcelResult<T> : ActionResult
{
private DataTable dataTable;
private string fileName;
public ExcelResult(IEnumerable<T> data, string filename, string[] columns)
{
this.dataTable = new DataTable();
using (var reader = ObjectReader.Create(data, columns))
{
dataTable.Load(reader);
}
this.fileName = filename;
}
public override void ExecuteResult(ControllerContext context)
{
if (context != null)
{
var response = context.HttpContext.Response;
response.Clear();
response.ContentType = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";
response.AddHeader("content-disposition", string.Format(@"attachment;filename=""{0}""", fileName));
using (XLWorkbook wb = new XLWorkbook())
{
wb.Worksheets.Add(dataTable, "Sheet1");
using (MemoryStream stream = new MemoryStream())
{
wb.SaveAs(stream);
response.BinaryWrite(stream.ToArray());
}
}
}
}
}
নিয়ামকটিতে কাস্টম এক্সারসেলস্ট ক্রিয়া ফলাফলটি নিম্নরূপ ব্যবহার করুন
[HttpGet]
public async Task<ExcelResult<MyViewModel>> ExportToExcel()
{
var model = new Models.MyDataModel();
var items = await model.GetItems();
string[] columns = new string[] { "Column1", "Column2", "Column3" };
string filename = "mydata.xlsx";
return new ExcelResult<MyViewModel>(items, filename, columns);
}
যেহেতু আমরা এইচটিটিপিগেট ব্যবহার করে ফাইলটি ডাউনলোড করছি, তাই মডেল এবং খালি বিন্যাস ছাড়াই একটি খালি ভিউ তৈরি করুন।
ফ্লাইতে তৈরি হওয়া ফাইলগুলি ডাউনলোড করার জন্য কাস্টম অ্যাকশনের ফলাফল সম্পর্কে ব্লগ পোস্ট:
https://acanozturk.blogspot.com/2019/03/custom-actionresult-for-files-in-aspnet.html