Mohammed Asarudeen R Ответов: 2

Asp.net MVC-fileupload image value показывает нулевые значения в методе httppost


У меня есть составные формы, в которые я мог бы загрузить изображение и другие значения формы.В то время как значения формы по праву принимаются через свойство FormCollection, в то время как файл загрузки всегда показывает нулевое значение в свойстве HttpPostedFileBase.Я просматриваю форумы, но не могу понять, где что пошло не так. Вот что я сделал, пожалуйста, пройдите через это и скажите, что пошло не так.Спасибо, друг.

Что я уже пробовал:

cshtml:



@использование (в формате HTML.Бигинформ("Создать", "StaffRegistration", FormMethod.Post, new { enctype = " multipart/form-data" }))
{
&ЛТ;входной тип="файл" название="StaffImage" идентификатор="StaffImage" /&ГТ;
}



Контроллер:
[AcceptVerbs(HttpVerbs. Post)]
public ActionResult Create(коллекция FormCollection, файл HttpPostedFileBase)
{
пробовать
{
// TODO: добавьте сюда логику вставки


StaffRegistration StaffReg = новая регистрация персонала();

Стаффрег.Имя = коллекция["имя"].Метод toString();
StaffReg. LastName = коллекция ["фамилия"].Метод toString();
Стаффрег.DateOfBirth = DateTime.Parse(collection ["DateofBirth"]);
StaffReg. Nationality = коллекция ["национальность"].Метод toString();
StaffReg. Gender = коллекция ["гендер"].Метод toString();
StaffReg. MaritalStatus = коллекция ["MaritalStatus"].Метод toString();
Стаффрег.Группа крови = коллекция["группа крови"].Метод toString();
StaffReg.StaffName = коллекция["StaffName"].Метод toString();
StaffReg.Отчество = коллекция["отчество"].Метод toString();
HttpPostedFileBase file = Request.Файлы ["StaffImage"];

StaffRegistrationBusSer StaffRegBusSer = новый StaffRegistrationBusSer();
StaffRegBusSer.AddStaffReg(StaffReg,файл);

return RedirectToAction ("индекс");
}

Уровень данных:

public bool AddStaffRegistraiton(StaffRegistration staffRegistration, HttpPostedFileBase File)
{
регистрация персонала.StaffImage = ConvertToByte(Файл);

используя(sqlconnection с Кон = новое sqlconnection(connectionString и))
{
Объект sqlparameter paramImage = новый объект sqlparameter();
парамимаж.ParameterName = " @StaffImage";
парамимаж.Значение = staffRegistration.StaffImage;
УМК.Параметры.Добавить(paramImage);
Кон. Открыт();
УМК.Метод executenonquery();

}
вернуть true;
}

Функция ConvertToByte:

public byte[] ConvertToByte (HttpPostedFileBase Image)
{
byte[] imagebyte = null;
BinaryReader Reader = новый BinaryReader(изображение.Входной поток);
imagebyte = читатель.ReadBytes((инт)изображения.ContentLength);
вернуться imagebyte;
}

2 Ответов

Рейтинг:
5

Mohammed Asarudeen R

@using (Html.BeginForm("Create", "StaffRegistration", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
<div class="form-group">
               <div class="col-md-offset-2 col-md-10">
                   <input type="file" name="StaffImage" id="StaffImage" />
               </div>
           </div>

}
Прежде чем я просто использовал beginform, который вложен в функцию view beginform, позже я изменил функцию beginform представления. и удалите вложенную функцию beginform.На самом деле произошло то, что я просто использовал multipart/formdata только для управления fileupload.Позже я понял, что это может быть включено на уровне представления.Спасибо друзьям за Ваше предложение..


Это модифицированный

@using (Html.BeginForm("Create", "StaffRegistration", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    @Html.AntiForgeryToken()

        <div class="form-horizontal">
            <h4>StaffRegistration</h4>
            <hr />
            @Html.ValidationSummary(true)

            <div class="form-group">
                @Html.LabelFor(model => model.StaffId, new { @class = "control-label col-md-2" })
                <div class="col-md-10">
                    @Html.EditorFor(model => model.StaffId)
                    @Html.ValidationMessageFor(model => model.StaffId)
                </div>
            </div>

<div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="file" name="StaffImage" id="StaffImage" />
                </div>
            </div>

            <div class="form-group">
                <div class="col-md-offset-2 col-md-10">
                    <input type="submit" value="Create" class="btn btn-default" />
                </div>
            </div>
        </div>
}


njammy

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

Mohammed Asarudeen R

о!Мне очень жаль, чувак! Да, ваше восприятие очень правильное. Я признаю ваш ответ, который поможет многим правильно! Спасибо за Ваше предложение, друг.Хорошего Вам дня

njammy

Спасибо вам всем самого доброго

Рейтинг:
18

njammy

Приветствую Мохаммеда Асарудина Р.

Пожалуйста, найдите решение вашей проблемы с некоторыми предложениями.

В моем примере используется вспомогательный метод со следующим кодом:

public bool ValidateFile(HttpPostedFileBase file)
        {
            switch(file.ContentType)
            {
                // Example: return valid = true for following file types:
                case ("image.gif"):
                case ("image/jpg"):
                case ("image/png"):
                    return true;

                // Otherwise if anything else, return false
                default: return false;
            }
        }


Решение 1-использование элементов html-формы:
Это решение аналогично вашему примеру кода без модели представления, но смотрите вариант 2 для подхода модели представления.
1. cshtml по
@using (Html.BeginForm("FileUploadNoModel", "Home", FormMethod.Post, new { encType = "multipart/form-data" }))
{
    <span>Choose a file: </span>
    <input type="file" id="fileUpload" name="fileUpload" />
    <input type="submit" value="Upload"/>
}

2. Контроллер
[HttpPost]
        // Note here that I have used only FormCollection parameter
        public ActionResult FileUploadNoModel(FormCollection collection)
        {
            if(ModelState.IsValid)
            {
                // Note here: the file is actually transported in the Request object,
                // not the FormCollection object, or as in your example;
                // "HttpPostFileBase" parameter.
                var postedFile = Request.Files["fileUpload"];
                var fileIsValid = ValidateFile(postedFile);
            }
            return View("Index");
        }


Решение 2 - с классом модели представления
1. cshtml по
@model MVCFileupload.Models.FileUploadModel
@using (Html.BeginForm("FileUploadWithModel", "Home", FormMethod.Post, new { encType = "multipart/form-data" }))
{
    <!-- Note here I have used TextBoxFor the model property -->
    @Html.TextBoxFor(m => m.File, new { type = "file" <!-- this attribute is important --> })
    <input type="submit" value="upload" />
}

2. Модели представления класса
namespace MVCFileupload.Models
{
    public class FileUploadModel
    {
        public HttpPostedFileBase File { get; set; }
    }
}

3. Контроллер
[HttpPost]
        public ActionResult FileUploadWithModel(FileUploadModel model)
        {
            if(ModelState.IsValid)
            {
                var postedFile = model.File;
                var fileIsValid = ValidateFile(postedFile);
            }
            return View("Index");
        }


Я верю, что эти решения помогут вам в вашей задаче.

Всего наилучшего.