基本上,我正在上传一个excel文件并解析信息,然后显示在视图中解析的内容。
using System.Data;
using System.Data.OleDb;
using System.Web;
using System.Web.Mvc;
using QuimizaReportes.Models;
using System.Collections.Generic;
using System;
namespace QuimizaReportes.Controllers
{
public class UploadController : Controller
{
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(HttpPostedFileBase excelFile)
{
if (excelFile != null)
{
//Save the uploaded file to the disc.
string savedFileName = "~/UploadedExcelDocuments/" + excelFile.FileName;
excelFile.SaveAs(Server.MapPath(savedFileName));
//Create a connection string to access the Excel file using the ACE provider.
//This is for Excel 2007. 2003 uses an older driver.
var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=Excel 12.0;", Server.MapPath(savedFileName));
//Fill the dataset with information from the Hoja1 worksheet.
var adapter = new OleDbDataAdapter("SELECT * FROM [Hoja1$]", connectionString);
var ds = new DataSet();
adapter.Fill(ds, "results");
DataTable data = ds.Tables["results"];
var people = new List<Person>();
for (int i = 0; i < data.Rows.Count - 1; i++)
{
Person newPerson = new Person();
newPerson.Id = data.Rows[i].Field<double?>("Id");
newPerson.Name = data.Rows[i].Field<string>("Name");
newPerson.LastName = data.Rows[i].Field<string>("LastName");
newPerson.DateOfBirth = data.Rows[i].Field<DateTime?>("DateOfBirth");
people.Add(newPerson);
}
return View("UploadComplete", people);
}
return RedirectToAction("Error", "Upload");
}
public ActionResult Error()
{
return View();
}
}
}
没有那么自信这是最好的方法。对于这位有抱负的高级程序员,你有任何MVC3兽医的建议吗? :)
我应该调用另一个Action,“UploadComplete”并调用UploadComplete视图,而不是直接从[POST] Index操作调用View吗?我何时知道是使用一种方法还是另一种方法?
答案 0 :(得分:0)
我认为Post-Redirect-Get模式在这里完全适用。例如,您可以使用TempData传递“人员”数据。
答案 1 :(得分:0)
我可能会将Index操作中的代码简化为保存文件,并重定向到另一个操作,该操作负责从文件中读取数据并显示它。
可以使用路径值的第三个参数调用RedirectToAction,该参数可以标识要读取的文件。