Передайте имя (значение) изображения для редактирования в asp .net MVC 5? - PullRequest
0 голосов
/ 21 ноября 2018

Моя модель:

    public int ID { get; set; }

    public string Name { get; set; }

    public string LastName { get; set; }

    public byte[] Fotografia { get; set; }

Контроллер (создание / получение):

      // GET: Empleados/Create
    public ActionResult Create()
    {
        return View();
    }

Контроллер (создание / публикация):

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Create([Bind(Include = "ID,Nombre,Paterno,Fotografia,")] Empleado empleado, HttpPostedFileBase foto)
    {
        var db = new SIPAE_Context();
        if (foto != null)
        {
            empleado.Fotografia = new byte[foto.ContentLength];
            foto.InputStream.Read(empleado.Fotografia, 0, foto.ContentLength);

            if (ModelState.IsValid)
            {
                db.Empleados.Add(empleado);
                db.SaveChanges();
                return RedirectToAction("Index");

            }
        }
        if (ModelState.IsValid)
        {
            db.Empleados.Add(empleado);
            db.SaveChanges();
            return RedirectToAction("Index");

        }
        return View(empleado);

    }

Просмотр (создание)):

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

          <div class="form-horizontal">
           <hr />
           @Html.ValidationSummary(true, "", new { @class = "text-danger" })
           <div class="form-group">
           Name
             <div class="col-md-10">
            @Html.EditorFor(model => model.Name, new { htmlAttributes = 
           new { @class = "form-control" } })
          @Html.ValidationMessageFor(model => model.Name, "", new { @class 
          = "text-danger" })
       </div>
     </div>

     <div class="form-group">
     Last Name
     <div class="col-md-10">
        @Html.EditorFor(model => model.LastName, new { htmlAttributes = new 
      { 
     @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.LastName, "", new { @class 
     = "text-danger" })
      </div>
   </div>

     <div class="form-group">
    Fotografia
    <div class="col-md-10">
        <input type="file" id="foto" name="foto" />
        @Html.ValidationMessageFor(model => model.Fotografia, "", new { 
        @class = "text-danger" })
      </div>
    </div>

Просмотр (индекс):

     <table class="table">
    <tr>
        <th>
            Fotografia
        </th>
        <th>
            Name
        </th>
        <th>
            Last Name
        </th>
        </tr>

         @foreach (var item in Model)
      {
        <tr>
            <td>
                @{
                    if (item.Fotografia != null)
                    {
                       var base64 = Convert.ToBase64String(item.Fotografia);
                       var imgsrc = string.Format("data:image/jpeg;base64,{0}", base64);
                        <img src='@imgsrc' style="max-height:100px;max-width:100px" />
                    }
                    Html.DisplayFor(modelItem => item.Fotografia);

                }
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.Name)
            </td>
            <td>
                @Html.DisplayFor(modelItem => item.LastName)
            </td>
            <td>
                @Html.ActionLink("Editar", "Edit", new { id = item.ID }) |
                @Html.ActionLink("Detalles", "Details", new { id = item.ID }) |
                @Html.ActionLink("Eliminar", "Delete", new { id = item.ID })
            </td>
        </tr>
                    }

Пока все хорошо, я могу вставить нового пользователя с именем, фамилией и изображением (фотография) и отобразить его.То, что мне нужно сделать, это редактировать вид, я хочу, чтобы он отображал имя изображения (Fotografia).Можете ли вы направить меня в правильном направлении?

Это то, что у меня есть на контроллере (Get):

   // GET: Empleados/Edit/5
    public ActionResult Edit(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        Empleado empleado = db.Empleados.Find(id);
        if (empleado == null)
        {
            return HttpNotFound();
        }
        return View(empleado);
    }

Это то, что у меня на контроллере (сообщение):

    [HttpPost]
    [ValidateAntiForgeryToken]
    public ActionResult Edit([Bind(Include = "ID,Name,LastName,Fotografia")] 
    Empleado empleado, HttpPostedFileBase foto)
    {
        var db = new SIPAE_Context();
        if (foto != null)
        {
            empleado.Fotografia = new byte[foto.ContentLength];
            foto.InputStream.Read(empleado.Fotografia, 0, foto.ContentLength);

            if (ModelState.IsValid)
            {
                db.Entry(empleado).State = EntityState.Modified;
                db.SaveChanges();
                return RedirectToAction("Index");
            }
        }
        if (ModelState.IsValid)
        {
            db.Entry(empleado).State = EntityState.Modified;
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        return View(empleado);
    }

Здесь я могу отредактировать пользователя, но не показываю предыдущее изображение (Fotografia), поэтому, если я нажму "отправить" без загрузки нового изображения (Fotgrafia), оно удалит предыдущее.То, что я должен сделать, - это вид Edit, я хочу, чтобы он отображал название изображения (Fotografia).Можете ли вы направить меня в правильном направлении?

...