ASP.NET MVC - carpeta Modelo de encargo para los campos de ID
-
30-09-2019 - |
Pregunta
Tengo las siguientes entidades:
public class Category
{
public virtual int CategoryID { get; set; }
[Required(ErrorMessage = "Section is required")]
public virtual Section Section { get; set; }
[Required(ErrorMessage = "Category Name is required")]
public virtual string CategoryName { get; set; }
}
public class Section
{
public virtual int SectionID { get; set; }
public virtual string SectionName { get; set; }
}
Ahora dentro de mi categoría Añadir vista tengo un cuadro de texto para introducir el sectionid por ejemplo:
<%= Html.TextBoxFor(m => m.Section.SectionID) %>
Me gustaría crear una carpeta de modelo personalizado para tener la lógica siguiente:
Si los extremos clave modelo con el ID y tiene un valor (se insertó un valor en el cuadro de texto) a continuación, establecer el objeto padre (Sección en este ejemplo) a Section.GetById (valor introducido) conjunto de lo contrario el objeto padre a nulo.
Te lo agradecería la ayuda aquí, ya que me ha sido desconcertante por un tiempo. Gracias
Solución 2
El uso de la solución publicado por Dave thieben i han llegado con lo siguiente:
public class CustomModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (bindingContext.ModelType.Namespace.EndsWith("Models.Entities") && value != null && (Utilities.IsInteger(value.AttemptedValue) || value.AttemptedValue == ""))
{
if (value.AttemptedValue != "")
return Section.GetById(Convert.ToInt32(value.AttemptedValue));
else
return null;
}
else
return base.BindModel(controllerContext, bindingContext);
}
}
Esto funciona muy bien, sin embargo, no seleccionar el valor correcto cuando el formulario se devuelve y el uso de una lista desplegable. Puedo ver por qué, pero hasta ahora mis intentos de solucionarlo han sido en vano. Te agradecería que, una vez más si usted podría ayudar.
Otros consejos
he publicado un ligante modelo en esta pregunta que utiliza un IRepository para llenar las claves externas si están presentes. usted podría modificarlo para adaptarlo a su propósito mejor.