Как решить эту ошибку, когда я загружаю изображение в MVC? - PullRequest
0 голосов
/ 23 сентября 2019

Я работаю с MVC со студией управления сервером SQL?

Ошибка: для этого объекта не определен конструктор без параметров

Я не буду знать, что это за ошибка?

Я меняю в 3 местах

1.Index.cshtml

2.create.cshtml

3.CrudManuallyController.cs

публичная строка Image {get;установлен;} varchar (50)

CrudManually Controller:   
    public class CrudManuallyController : Controller
    {
            public ActionResult Create()
            {
                return View();
            }

            // POST: CrudManually/Create
            [HttpPost]
            public ActionResult Create(manage manages,HttpPostedFileBase image)
            {
                try
                {
                      var folderPath = Server.MapPath("~/Images/");
                      image.SaveAs(Path.Combine("~/Images/", image.FileName));
                      manages.Image = Path.Combine("~/Images/", image.FileName);

                      // TODO: Add insert logic here
                      db.manages.Add(manages);
                      db.SaveChanges();
                      return RedirectToAction("Index");
                }
                catch
                {
                    return View(manages);
                }
            }
    }
create.cshtml
    <h2>Create</h2>
    @using (Html.BeginForm("Create", "CrudManually", FormMethod.Post, new { enctype = "multipart/form-data" })) 
{
                <div class="editor-label">
                    @Html.LabelFor(model => model.Image)
                </div>
             <div class="editor-field">
                <input id="Image" title="Image Uploading" type="file" name="image" />
            </div>
    }
Index.cshtml
<table>
          <tr>
            <th>
                @Html.DisplayNameFor(model => model.Image)
            </th>
          </tr>
          <tr>
            @foreach (var item in Model)
            {
               <td>
                 <img src="@Url.Content(item.Image)" alt="Image not display" width="20%" height="20%" />
                </td>
            }
          </tr>
</table>        

Изображение: введите описание изображения здесь

Как решить эту ошибку?Я не буду знать, в чем ошибка?любой код добавляет в мою программу и успешно выполняет загрузку моего изображения. Что я могу сделать?

Image1:

введите описание изображения здесь

Ответы [ 2 ]

1 голос
/ 23 сентября 2019

Код контроллера

public ActionResult Create()
{
    return View();
}

[HttpPost]
public ActionResult Create(manages manages, HttpPostedFileBase image)
{
    try
    {
        if (image != null)
        {
            //using System.IO;
            var folderPath = Server.MapPath("~/Images/");
            if (!Directory.Exists(folderPath))
            {
                Directory.CreateDirectory(folderPath);
            }

            //Path.Combine for concate folder path and image name together
            var imagePathName = Path.Combine(folderPath, image.FileName);
            image.SaveAs(imagePathName);
            manages.Image = image.FileName;
            //TODO: Add insert logic here
            //db.manages.Add(manages);
            db.SaveChanges();
        }
        return RedirectToAction("Index");
    }
    catch
    {
        return View(manages);
    }
}

код create.cshtml

@using (Html.BeginForm("Create", "Home", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
    <div class="editor-label">
        Image
    </div>
    <div class="editor-field">
        <input id="Image" title="Image Uploading" type="file" name="image" />
    </div>
    <input type="submit" value="button" />
}

Index.cshtml

<table>
          <tr>
            <th>
                @Html.DisplayNameFor(model => model.Image)
            </th>
          </tr>
          <tr>
            @foreach (var item in Model)
            {
               <td>
                 <img src="@Url.Content('~/Images/' + item.Image)" alt="Image not display" width="20%" height="20%" />
                </td>
            }
          </tr>
</table>   
1 голос
/ 23 сентября 2019

Контроллер CrudManually

//replace HttpPostedFile with HttpPostedFileBase object
//please add server.Mappath function into code for exact foler structure to save file
public class CrudManuallyController : Controller
{
        public ActionResult Create()
        {
            return View();
        }

        // POST: CrudManually/Create
        [HttpPost]
        public ActionResult Create(manage manages,HttpPostedFileBase image)
        {
            try
            {
                var folderPath = Server.MapPath("~/Images/");
                image.SaveAs(Path.Combine(folderPath, image.FileName));
                manages.Image= Path.Combine(folderPath, image.FileName);
                // TODO: Add insert logic here
                db.manages.Add(manages);
                db.SaveChanges();
                return RedirectToAction("Index");
            }
            catch
            {
                return View(manages);
            }
        }
}

create.cshtml

//encytype is wrong please replace it with enctype
//input file name="file" so it will not set on controller side as its name on controller side is 'image', so you need to repalce name='file' with name='image'

<h2>Create</h2>
@using (Html.BeginForm("Create", "CrudManually", FormMethod.Post, new { enctype = "multipart/form-data" }))
{
            <div class="editor-label">
                @Html.LabelFor(model => model.Image)
            </div>
            <div class="editor-field">
                <input id="Image" title="Image Uploading" type="file" name="image" />
            </div>
}

Index.cshtml

<table>
          <tr>
            <th>
                @Html.DisplayNameFor(model => model.Image)
            </th>
          </tr>
          <tr>
            @foreach (var item in Model)
            {
               <td>
                   <img src="@Url.Content('~/Images/' + item.Image)" alt="Image not display" width="20%" height="20%" />
                </td>
            }
          </tr>
</table>      

Объяснение:

ASP.NET C # MVC предоставляет средство класса HttpPostedFileBase - абстрактного класса, который содержит те же члены, что и класс HttpPostedFile.поэтому мы можем использовать этот абстрактный класс при работе с загрузкой файла на сервер.

Шаг 1: Для этого нам нужно использовать тип ввода файла с атрибутом name .

Шаг 2: Форма должна быть POST с enctype = "multipart / form-data"

Шаг 3: На стороне контроллера нам нужно получить значение объекта HttpPostedFileBase сто же имя, которое мы уже дали типу входного файла

public ActionResult Create(manage manages,HttpPostedFileBase image)

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

var virtualPath = StaticValues.AdvertisementImagePath;
var physicalPath = Server.MapPath(virtualPath);
Utilities.SaveFile(fileObject, virtualPath, physicalPath, "FILE PATH");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...