如何从不直接在模型中的属性获取 asp.net mvc 中的表单值
本文关键字:asp 获取 net mvc 表单 属性 模型 | 更新日期: 2023-09-27 17:56:37
我正在尝试创建一个表单,该表单将具有一些基于模型的标准属性,但用户将能够扩展这些属性。
所以我有一个名为实体的实体,另一个称为财产的实体和另一个称为公司的实体。 实体可以具有属性列表(如 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(公司)实体的XML字段中。
页面呈现后,单击查看源代码,并查看您创建的输入字段的名称,它应该是每个属性中的值。Nombre ,在服务器端你可以通过 Request["fieldname"]
访问此字段的值,因此,对于每个项目,通过以下方式获取其价值
Request[propiedad.Nombre]