C# Html.BeginCollectionItem上的列表在提交{get;set;}时出错
我正在用MVC开发一个没有实体框架的应用程序,它有一个包含多个对象和结构列表的对象 我使用html.begincollectionitem()生成并添加新的子对象,效果很好。提交时出现问题 在这方面:C# Html.BeginCollectionItem上的列表在提交{get;set;}时出错,c#,list,model-view-controller,C#,List,Model View Controller,我正在用MVC开发一个没有实体框架的应用程序,它有一个包含多个对象和结构列表的对象 我使用html.begincollectionitem()生成并添加新的子对象,效果很好。提交时出现问题 在这方面: [MinLength(1)] public List<DescCota> CotasFicha { get; set; } @model Productiva.Models.DescCota @{ ViewBag.Title=“Fichas”; } @使用(Html.BeginCol
[MinLength(1)]
public List<DescCota> CotasFicha { get; set; }
@model Productiva.Models.DescCota
@{
ViewBag.Title=“Fichas”;
}
@使用(Html.BeginCollectionItem(“DescCota”))
{
@TextBoxFor(Model=>Model.ID,新的{@class=“form control”,@type=“text”,@placeholder=“ID Cota”})
@Html.TextBoxFor(Model=>Model.Nombre,新的{@class=“form control”,@type=“text”,@placeholder=“Nombre”})
@CheckBoxFor(Model=>Model.Activa,新的{@class=“form check-input”,@type=“checkbox”})
阿提沃?
}
什么是Html.BeginCollectionItem
?它不是标准的MVC特性,它是一个nuget包。我以此作为参考:
public class Ficha
{
public int entry { get; set; }
[Required(ErrorMessage = "El nombre de la ficha es obligatorio")]
public string nombreFicha { get; set; }
[Required(ErrorMessage = "Este campo es obligatorio")]
public string nombreLargoFicha { get; set; }
[Required(ErrorMessage = "La imagen es requerida")]
public string RutaImgFicha { get; set; }
private byte[] imagenFicha { get; set; }
public string RutaImgRF { get; set; }
private byte[] imagenRF { get; set; }
public string UltimoMensaje;
public DateTime CreateDate { get; set; }
public DateTime VersionDate { get; set; }
public int UserSign { get; set; }
public string UserName { get; set; }
public int UserSign2 { get; set; }
public string UserName2 { get; set; }
//Cotas
[MinLength(1)]
public List<DescCota> CotasFicha { get; set; }
//Características Globales
[MinLength(1)]
public List<Caracteristica> CaracteristicasFicha { get; set; }
//Productos Asociados
[MinLength(1)]
public List<Producto> ProductosFicha { get; set; }
private Data.Bdto Bdto;
#region Constructor
public Ficha(User U, int _entry)
{
//Conector
Bdto = new Data.Bdto();
if (_entry == -1)
{
entry = SiguienteID();
nombreFicha = "";
RutaImgFicha = "";
imagenFicha = null;
RutaImgRF = "";
imagenRF = null;
UltimoMensaje = "";
CreateDate = DateTime.Now;
VersionDate = DateTime.Now;
UserSign = U.UserID;
UserName = U.UserCode;
UserSign2 = U.UserID;
UserName2 = U.UserCode;
//Listas
CotasFicha = new List<DescCota>();
CaracteristicasFicha = new List<Caracteristica>();
ProductosFicha = new List<Producto>();
}
else
{
//Conector
Bdto = new Data.Bdto();
//Ultimo.
entry = _entry; //Si es nuevo, debe ser la ultima + 1, agregar
nombreFicha = "";
RutaImgFicha = "";
imagenFicha = null;
RutaImgRF = "";
imagenRF = null;
UltimoMensaje = "";
CreateDate = DateTime.Now;
VersionDate = DateTime.Now;
UserSign = U.UserID;
UserName = U.UserCode;
UserSign2 = U.UserID;
UserName2 = U.UserCode;
//Listas
CotasFicha = new List<DescCota>();
CaracteristicasFicha = new List<Caracteristica>();
ProductosFicha = new List<Producto>();
}
}
public Ficha(User U)
{
//Conector
Bdto = new Data.Bdto();
entry = SiguienteID();
nombreFicha = "";
RutaImgFicha = "";
imagenFicha = null;
RutaImgRF = "";
imagenRF = null;
UltimoMensaje = "";
CreateDate = DateTime.Now;
VersionDate = DateTime.Now;
UserSign = U.UserID;
UserName = U.UserCode;
UserSign2 = U.UserID;
UserName2 = U.UserCode;
//Listas
CotasFicha = new List<DescCota>();
CaracteristicasFicha = new List<Caracteristica>();
ProductosFicha = new List<Producto>();
}
public Ficha()
{
//Conector
Bdto = new Data.Bdto();
//Listas
CotasFicha = new List<DescCota>();
CaracteristicasFicha = new List<Caracteristica>();
ProductosFicha = new List<Producto>();
}
#endregion
//Métodos
#region Imagen
//Carga Imagen (RF o Ficha)
public bool LoadImage(System.Drawing.Image Img, bool Ficha)
{
bool CargaCorrecta;
//cargo
try
{
using (var ms = new MemoryStream())
{
Img.Save(ms, Img.RawFormat);
if (Ficha)
{
imagenFicha = ms.ToArray();
CargaCorrecta = true;
//Mensaje de finalizacion
UltimoMensaje = "";
}
else
{
imagenRF = ms.ToArray();
CargaCorrecta = true;
//Mensaje de finalizacion
UltimoMensaje = "";
}
}
}
catch (Exception e)
{
CargaCorrecta = false;
UltimoMensaje = e.Message;
}
return CargaCorrecta;
}
//Retorna Imagen
public System.Drawing.Image RetornaImagen(bool Ficha)
{
System.Drawing.Image Imagen;
if (Ficha)
{
using (var ms = new MemoryStream(imagenFicha))
{
Imagen = System.Drawing.Image.FromStream(ms);
}
}
else
{
using (var ms = new MemoryStream(imagenRF))
{
Imagen = System.Drawing.Image.FromStream(ms);
}
}
return Imagen;
}
#endregion
#region Cotas
//Nueva Cota
public void NuevaCota(string _ID, bool Act, string Nmm)
{
DescCota Nueva = new DescCota
{
entry = this.entry,
ID = _ID,
Activa = Act,
Nombre = Nmm
};
//Agrego a ficha
CotasFicha.Add(Nueva);
}
#endregion
#region Caracteristicas
public void NuevaCaracteristica()
{
Caracteristica Nueva = new Caracteristica
{
entry = this.entry
};
CaracteristicasFicha.Add(Nueva);
}
public void QuitarCaracteristica(Caracteristica Seleccion)
{
CaracteristicasFicha.Remove(Seleccion);
//El borrar quita de la DB.
}
#endregion
#region Productos
public void NuevoProducto()
{
Producto Nuevo = new Producto
{
entry = this.entry
};
ProductosFicha.Add(Nuevo);
}
public void QuitarProducto(Producto Seleccion)
{
ProductosFicha.Remove(Seleccion);
//Quito de la DB igualmente.
}
#endregion
#region BaseDatos
//Guardar o Actualizar (Save)
public void Guardar()
{
}
//OpenID
private int SiguienteID()
{
return Bdto.CC_WEB_SiguienteIDFicha();
}
#endregion
}
public struct DescCota
{
public int entry { get; set; }
[Required(ErrorMessage = "El Identificador es requerido")]
public string ID { get; set; }
[Required(ErrorMessage = "El nombre de la cota es obligatorio")]
public string Nombre { get; set; }
public bool Activa { get; set; }
public DateTime CreateDate { get; set; }
public DateTime VersionDate { get; set; }
public int UserSign { get; set; }
public int UserSign2 { get; set; }
}
public class Producto
{
public int entry { get; set; }
public string ItemCode { get; set; }
public bool Valid { get; set; }
public string ItemName { get; set; }
public DateTime CreateDate { get; set; }
public int UserSign { get; set; }
private Data.Bdto Bdto;
//Cotas por producto
List<CotasProducto> Cotas;
public Producto()
{
entry = 0;
ItemCode = "";
ItemName = "";
Cotas = new List<CotasProducto>();
Bdto = new Data.Bdto();
}
public Producto(int ID_)
{
entry = ID_;
ItemCode = "";
ItemName = "";
Cotas = new List<CotasProducto>();
Bdto = new Data.Bdto();
}
//Listado de controles (personalizados o no)
public void GetItem(string Code)
{
ItemCode = Code;
ItemName = Bdto.CC_WEB_GetItemName(Code);
}
private string GetItemName(string ItemCode)
{
return Bdto.CC_WEB_GetItemName(ItemCode);
}
public bool ExisteEnOotroModelo(out string ModelName)
{
bool Existe = false;
ModelName = Bdto.CC_WEB_ValidaSiObjetoExisteEnOtroModelo(ItemCode);
if(ModelName.Length > 1)
{
Existe = true;
}
return Existe;
}
}
public struct CotasProducto
{
public string ItemCode { get; set; }
public string IdCota { get; set; }
public double ValNormal { get; set; }
public double ValMaximo { get; set; }
public double ValMinimo { get; set; }
//Controles por cota
}
public struct Caracteristica
{
public int entry { get; set; }
public string Nombre { get; set; }
public string Detalle { get; set; }
}