Не чувствую 100% по поводу моего дизайна контроллера - PullRequest
0 голосов
/ 25 февраля 2011

По сути, я загружаю файл 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, для этого начинающего программиста? :)

Должен ли я вызывать другое Действие «UploadComplete» и вызывать это представление UploadComplete вместо вызова View непосредственно из действия [POST] Index? Когда я знаю, использовать ли один подход или другой?

Ответы [ 2 ]

0 голосов
/ 25 февраля 2011

Я бы, вероятно, сократил код в действии Index до простого сохранения файла и перенаправления на другое действие, которое заботится о считывании данных из файла и их отображении.третий параметр для значений маршрута, который может идентифицировать файл для чтения.

0 голосов
/ 25 февраля 2011

Я думаю, что шаблон Post-Redirect-Get отлично подошел бы здесь. Например, вы можете передавать данные о людях, используя TempData.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...