Требуется ли MVC3 передача модели между представлениями для поддержания состояния? - PullRequest
0 голосов
/ 24 октября 2011

У меня есть 8 страниц с пометкой Step0-Step7, которые используются для постепенного сохранения данных в модель под названием dr405. После Step7 мне нужно отобразить файл Upload.cshtml, который создает папку на основе DR405Profile.CurrentUser.TangiblePRopertyID из моего настраиваемого поставщика профилей. Итак, на данный момент я не публикую ничего от Step7 до Upload.cshtml. После Upload.cshtml я отображаю UploadSummary.cshtml, который просто перечисляет файлы, расположенные в каталоге на основе DR405Profile.CurrentUser.TangiblePRopertyID. Теперь я должен перевести пользователя на страницу review, которая отображает постоянные данные БД для модели dr405. Означает ли это, что я должен передать свою модель через Upload и UploadSummary, даже если эти страницы не взаимодействуют с моделью?

Мой план - передать идентификатор как скрытый параметр из

step7 -> Upload -> UploadSummary -> Review (id) <- сообщение принимает ID в качестве параметра. Я не уверен, что это лучший способ. </p>

Важный момент

Я хочу понять, могу ли я сделать то же самое с моделью

Step7 (модель) -> Загрузка (модель) -> Загрузка (модель) -> Просмотр (идентификатор или модель)

public ActionResult Review(string id)
{
    var service = new DR405Service();

    var dr405 = db.dr405s.FirstOrDefault(d => d.TangiblePropertyId == id);


    return View(dr405);
}

    public ActionResult UploadSummary()
    {
        var saveLocation = Path.Combine(Server.MapPath("\\"), "returns\\" + DR405Profile.CurrentUser.TangiblePropertyId);
        ViewData["files"] = Directory.GetFiles(saveLocation).ToList() ;
        return View();
    }

    [HttpPost]
    public ActionResult Upload(HttpPostedFileBase uploadfile)
    {
        var saveLocation = Path.Combine(Server.MapPath("\\"), "returns\\" + DR405Profile.CurrentUser.TangiblePropertyId);
        System.IO.Directory.CreateDirectory(saveLocation);
        uploadfile.SaveAs(Path.Combine(saveLocation, Path.GetFileName(uploadfile.FileName)));
        ViewData["UploadStatus"] = String.Format("File name: {0}, {1}Kb Uploaded Successfully.", uploadfile.FileName, (int)uploadfile.ContentLength / 1024);
        return View();
    }

Ответы [ 2 ]

2 голосов
/ 24 октября 2011

У вас есть несколько вариантов сохранения данных между запросами.

Вы можете использовать функцию MVC TempData .Вы можете использовать функцию Peek / Keep в TempData, чтобы хранить ее до тех пор, пока вам не понадобится ее утилизировать (поскольку по умолчанию после обращения к данным она удаляется).

Сессия также будет работать, но не рекомендуется, так как ее сложнее тестировать в модульном тесте.

1 голос
/ 24 октября 2011

Это прекрасно. Получение идентификатора записи в базе данных является стандартной практикой. Это требует меньшей пропускной способности, позволяет MVC быстрее определять правильный маршрут / контроллер / действие и не дает плохим парням столько возможностей для отправки вредоносных данных на ваш сервер.

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