Сохранение файлов и имен в таблицу базы данных с использованием каждого на request.files. - PullRequest
0 голосов
/ 09 марта 2012

Приложение MVC3 VB.NET. У меня есть несколько полей для загрузки файлов в форме в моем приложении mvc3. Request.Files показывает 3 файла, когда я ставлю точку останова в приведенной ниже функции и смотрю на нее. Проблема не в кодировании счетчика, а в случае выбора. Я не вижу способа обработать сохранение каждого имени файла в столбце базы данных. принадлежит ... Есть ли возможность назначить переменную на лету, я думаю, вы могли бы сказать, чтобы цикл foreach отбрасывал файл в правильном столбце. Т.е. handoutFile1, handoutFile2, handoutFile3, Etc .... Как есть ниже будет перезаписывать имя файла в handoutfile1 каждый раз, когда проходит цикл .... Я думал о создании счетчика в цикле и просто поместил в него регистр выбора для назначения столбца db на основе номера счетчика. Похоже, дешевая работа вокруг.

 For Each File As String In Request.Files

                Dim hpf As HttpPostedFileBase = TryCast(Request.Files(File), HttpPostedFileBase)
                If hpf.ContentLength = 0 Then
                    Continue For
                End If

                Dim savedfileName As String = Path.Combine(AppDomain.CurrentDomain.BaseDirectory) + "\CourseHandouts\" + hpf.FileName
                hpf.SaveAs(savedfileName)
                _filename = hpf.FileName
                courses.handoutFile1 = _filename

            Next

Ответы [ 2 ]

1 голос
/ 09 марта 2012

Я не знаю VB.Net, но я попытаюсь ответить в коде C #,

В своем действии вы можете определить в параметре как

    [HttpPost]
    public ActionResult Index(IList<HttpPostedFileBase> postedFiles)
    {
        foreach (var file in postedFiles)
        {
            //
        }
        return View();
    }

и в представлении, подобном следующему,

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { enctype = "multipart/form-data"  }))
{
@Html.ValidationSummary(true)
<fieldset>
    <legend>TestModel</legend>
    @Html.TextBox("postedFiles[0]",null, new { type = "file" })
    @Html.TextBox("postedFiles[1]",null, new { type = "file" })
    @Html.TextBox("postedFiles[2]",null, new { type = "file" })
    <p>
        <input type="submit" value="Create" />
    </p>
</fieldset>
}  
0 голосов
/ 09 марта 2012

Ваш дизайн базы данных кажется неправильным. Вместо того, чтобы пытаться сохранить каждый отдельный файл в отдельном столбце, вы можете создать другую таблицу, которая будет содержать все файлы в виде строк и которая будет иметь внешний ключ первой таблицы для соответствия записи. Таким образом, у вас будет courses.handoutFiles, который будет массивом вместо courses.handoutFile1, courses.handoutFile2, ...

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

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