Метод, чтобы издавать, не функционирует ASP.NET MVC 5

Я работаю в Веб приложении концессионера автомобилей, у меня есть вид, чтобы издавать объект Самоходного типа, у которого есть следующие параметры: модель, год изготовления, цвета, цены, передачи, топлива, отметки, модель, категория, состояние, дополнительный и фотография.

Я произвел мой драйвер используя MVC и Энтити Фрамеворк, однако, он не изменяет ни одного из данных, только изменяет фотографию.

Метод, чтобы издавать

[HttpPost, ActionName("Edit")]
    [ValidateAntiForgeryToken]
    public ActionResult Edit(Automovil automovil, HttpPostedFileBase archivo)
    {
        if(automovil ==null){
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        if (TryUpdateModel(automovil, "", new string[] { "idAutomovil,modelo,año,color,precio,informacionExtra,idMarca,idCategoria,idCombustible,idEstado,idTransmision" }))
        {
            try
            {
                if(archivo != null && archivo.ContentLength > 0)
                {
                    if(automovil.archivos.Any(i => i.tipo == FileType.Imagen))
                    {
                        db.archivo.Remove(automovil.archivos.First(i => i.tipo == FileType.Imagen));
                    }
                    var imagen = new Archivo
                    {
                        nombre = System.IO.Path.GetFileName(archivo.FileName),
                        tipo = FileType.Imagen,
                        ContentType = archivo.ContentType
                    };
                    using (var reader = new System.IO.BinaryReader(archivo.InputStream))
                    {
                        imagen.contenido = reader.ReadBytes(archivo.ContentLength);
                    }
                    automovil.archivos = new List { imagen };
                }
                db.Entry(automovil).State = EntityState.Modified;
                db.SaveChanges();

                return RedirectToAction("Index");
            }
            catch(RetryLimitExceededException /* dex */)
            {
                //Log the error (uncomment dex variable name and add a line here to write a log.)
                ModelState.AddModelError("", "Unable to save changes. Try again and if the problem persists, see your system administrator.");
            }
        }
        ViewBag.idCategoria = new SelectList(db.categoria, "idCategoria", "nombre", automovil.idCategoria);
        ViewBag.idCombustible = new SelectList(db.combustible, "idCombustible", "nombre", automovil.idCombustible);
        ViewBag.idEstado = new SelectList(db.estado, "idEstado", "nombre", automovil.idEstado);
        ViewBag.idMarca = new SelectList(db.marca, "idMarca", "nombre", automovil.idMarca);
        ViewBag.idTransmision = new SelectList(db.transmision, "idTransmision", "nombre", automovil.idTransmision);
        return View(automovil);
    }

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

Debugueando программа я смог ощущаться, что, издав какие-то поля Машины, они появляются как null.

Debug

introducir la descripción de la imagen aquí

Он был бы благодарен они могли помогать мне, чтобы видеть, что то, что я должен исправлять в моем драйвере для того, чтобы он получил эти данные.

EDIT

Код Вида

@model Autoventas_IN6AV.Models.Automovil

@{
    ViewBag.Title = "Editar";
}

Editar Información

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

Automovil


@Html.ValidationSummary(true) @Html.HiddenFor(model => model.idAutomovil)
@Html.LabelFor(model => model.modelo, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.modelo) @Html.ValidationMessageFor(model => model.modelo)
@Html.LabelFor(model => model.año, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.año) @Html.ValidationMessageFor(model => model.año)
@Html.LabelFor(model => model.color, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.color) @Html.ValidationMessageFor(model => model.color)
@Html.LabelFor(model => model.precio, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.precio) @Html.ValidationMessageFor(model => model.precio)
@Html.LabelFor(model => model.informacionExtra, htmlAttributes: new { @class = "control-label col-md-2" })
@Html.EditorFor(model => model.informacionExtra) @Html.ValidationMessageFor(model => model.informacionExtra)
@Html.LabelFor(model => model.idMarca, "Marca", htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DropDownList("idMarca", String.Empty) @Html.ValidationMessageFor(model => model.idMarca)
@Html.LabelFor(model => model.idCategoria, "Categoria", htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DropDownList("idCategoria", String.Empty) @Html.ValidationMessageFor(model => model.idCategoria)
@Html.LabelFor(model => model.idCombustible, "Combustible", htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DropDownList("idCombustible", String.Empty) @Html.ValidationMessageFor(model => model.idCombustible)
@Html.LabelFor(model => model.idEstado, "Estado", htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DropDownList("idEstado", String.Empty) @Html.ValidationMessageFor(model => model.idEstado)
@Html.LabelFor(model => model.idTransmision, "Transmisión", htmlAttributes: new { @class = "control-label col-md-2" })
@Html.DropDownList("idTransmision", String.Empty) @Html.ValidationMessageFor(model => model.idTransmision)
@if (Model.archivos.Any(i => i.tipo == FileType.Imagen)) {
Foto Actual
Imagen Automóvil.
}
@Html.Label("Foto", new { @class = "control-label col-md-2" })
}
@Html.ActionLink("Regresar al listado", "Index")
@section Scripts { @Scripts.Render("~/bundles/jqueryval") }

EDIT

Код Модели

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;

namespace Autoventas_IN6AV.Models
{
    public class Automovil
    {
        [Key]
        public int idAutomovil { get; set; }
        [Display(Name = "Modelo"), Required(ErrorMessage = "Este dato es obligatorio.")]
        public String modelo { get; set; }
        [Display(Name = "Año de Fabricación"), Required(ErrorMessage = "Este dato es obligatorio.")]
        [DataType(DataType.Date)]
        [DisplayFormat(DataFormatString = "{0:yyyy}", ApplyFormatInEditMode = true)]
        public DateTime año { get; set; }
        [Display(Name = "Color"), Required(ErrorMessage = "Este dato es obligatorio.")]
        public String color { get; set; }
        [Display(Name = "Precio"), Required(ErrorMessage = "Este dato es obligatorio."), DataType(DataType.Currency)]
        public String precio { get; set; }
        [Display(Name = "Extras"), Required(ErrorMessage = "Este dato es obligatorio.")]
        public String informacionExtra { get; set; }

        public int idMarca { get; set; }
        public virtual Marca marca { get; set; }

        public int idCategoria { get; set; }
        public virtual Categoria categoria { get; set; }

        public int idCombustible { get; set; }
        public virtual Combustible combustible { get; set; }

        public int idEstado { get; set; }
        public virtual Estado estado { get; set; }

        public int idTransmision { get; set; }
        public virtual Transmision transmision { get; set; }

        public virtual Reservacion reservacion { get; set; }

        public virtual List archivos { get; set; }

    }
}

0
задан 06.04.2016, 08:25
1 ответ

Согласно твоей модели, это нормальное. От вида только ты будешь получать id связанных организаций, нет проблемы, что например combustible будьте null всякий раз когда idCombustible будьте распределены. Entity Framework обновит правильно организацию, если одно из двух свойств будет распределено. MVC не загружает автоматически организации, связанные из-за id, у него нет информации, чтобы знать как.

Также есть ошибка в линии TryUpdateModel, стоимость:

Плохо:

new string[] { "idAutomovil,modelo,año,color,precio,informacionExtra,idMarca,idCategoria,idCombustible,idEstado,idTransmision" }

Верно:

new string[] { "idAutomovil", "modelo", "año", "color", "precio", "informacionExtra", "idMarca", "idCategoria", "idCombustible", "idEstado", "idTransmision" }
2
ответ дан 24.11.2019, 14:38
  • 1
    Tambi и # 233; n я fij и # 233; в этом, что он получает (например) idContenido и контент. Тогда, в моей одинокой модели я должен иметь id свойства, на которое я ссылаюсь? Я не вызывать и # 225; проблема, во время которой были бы загружены данные в dropdownlist? – José Carlos Loarca Hass 06.04.2016, 08:03
  • 2
    Он не будет вмешиваться с dropdownlist, потому что тексты или est и # 225; s грузя прямо базы данных, когда ты делаешь ViewBag.idCategoria = new SelectList(db.categoria, "idCategoria", "nombre", automovil.idCategoria); – Diego Torres 06.04.2016, 08:06
  • 3
    Ok, чтобы подтверждать, это моя Самоходная модель, только я должен оставлять id чужеземных ключей, он не необходим public virtual Ejemplo ejemplo? [ i.imgur.com/NcbXfzl.jpg] – José Carlos Loarca Hass 06.04.2016, 08:12
  • 4
    Ohh, это меняет вещи, pens и # 233; что ты сохранял descripci и # 243; n, но у тебя есть ссылка на организацию, это est и # 225; хорошо (хотя он опциональный). То, что значит, что он ожидает, что этой стоимости было null, так как только est и # 225; s распределяя id, но EF не быть должным и # 237; чтобы иметь проблему в обновлении этого. и #191; Стоимость отметки или categor и # 237; в они исчезают? это не быть должным и # 237; чтобы происходить – Diego Torres 06.04.2016, 08:21
  • 5
    Проясняя, нет проблемы, что этих свойств было null, если он состоит в том, что ты распределяешь FK. – Diego Torres 06.04.2016, 08:22