【发布时间】:2015-12-11 07:27:00
【问题描述】:
我正在尝试创建一个表单,该表单将具有基于模型的一些标准属性,但用户将能够扩展这些属性。
所以我有一个名为 Entity 的实体、另一个名为 Property 的实体和另一个名为 Company 的实体。一个实体可以有一个属性列表(如 twitter 句柄、网站等)。但是,我想将这些扩展属性的值保存在公司实体的 XML 字段中。
为了说明,我将模型粘贴在这里。
public class Entidad
{
[Key]
public int Id { get; set; }
public string Nombre { get; set; }
public virtual ICollection<Propiedad> Propiedades { get; set; }
}
public class Propiedad
{
[Key]
public int Id { get; set; }
public virtual Entidad Entidad { get; set; }
public string Codigo { get; set; }
public string Nombre { get; set; }
public string TipoDeDatos { get; set; }
}
public class Empresa
{
[Key]
public int Id { get; set; }
public string Nombre { get; set; }
public string NIT { get; set; }
public string NombreRepresentanteLegal { get; set; }
public string TelefonoRepresentanteLegal { get; set; }
public string NombreContacto { get; set; }
public string TelefonoContacto { get; set; }
[Column(TypeName = "xml")]
public string PropiedadesExtra { get; set; }
}
在我的创建视图中,我有以下内容:
@model Inspinia_MVC5.Areas.GlobalAdmin.Models.Empresa
@{
ViewBag.Title = "Create";
Layout = "~/Areas/GlobalAdmin/Views/Shared/_LayoutGlobalAdmin.cshtml";
var propiedades = (List<Inspinia_MVC5.Areas.GlobalAdmin.Models.Propiedad>)ViewData["CamposAdicionales"];
}
然后我像这样渲染自定义属性:
<div class="panel panel-default">
<div class="panel-heading">Propiedades adicionales</div>
<div class="panel-body">
@foreach (Inspinia_MVC5.Areas.GlobalAdmin.Models.Propiedad propiedad in propiedades)
{
if (propiedad.TipoDeDatos == "Texto")
{
<div class="form-group">
@Html.Label(propiedad.Nombre, new { @class = "control-label col-md-2" })
@*@Html.LabelFor(prop => propiedad.Nombre, new { @class = "control-label col-md-2" })*@
<div class="col-md-10">
@Html.Editor(propiedad.Nombre)
@Html.ValidationMessageFor(prop => propiedad.Nombre)
</div>
</div>
}
}
</div>
</div>
在 empresas 控制器上创建操作我有这个:
public ActionResult Create()
{
var listFields = from b in db.Propiedades
where b.Entidad.Nombre == "Empresa"
select b;
ViewData["CamposAdicionales"] = listFields.ToList<Propiedad>();
return View();
}
这会呈现一个像这样的漂亮表单: http://screencast.com/t/7HsI6ci9GVdo
但是,我不知道的是如何获取这些动态表单字段并将这些值保存在 Empresa(company) 实体的 XML 字段中。
【问题讨论】:
标签: c# asp.net asp.net-mvc entity-framework asp.net-mvc-4