C# 如何在asp.net mvc中从不直接在模型中的属性获取表单值
我正在尝试创建一个表单,该表单将具有基于模型的一些标准属性,但用户将能够扩展这些属性 所以我有一个实体叫做实体,另一个实体叫做财产,另一个实体叫做公司。实体可以有一个属性列表(如twitter句柄、网站等)。但是,我希望将这些扩展属性的值保存在公司实体的XML字段中 为了举例说明,我将在这里粘贴模型C# 如何在asp.net mvc中从不直接在模型中的属性获取表单值,c#,asp.net,asp.net-mvc,entity-framework,asp.net-mvc-4,C#,Asp.net,Asp.net Mvc,Entity Framework,Asp.net Mvc 4,我正在尝试创建一个表单,该表单将具有基于模型的一些标准属性,但用户将能够扩展这些属性 所以我有一个实体叫做实体,另一个实体叫做财产,另一个实体叫做公司。实体可以有一个属性列表(如twitter句柄、网站等)。但是,我希望将这些扩展属性的值保存在公司实体的XML字段中 为了举例说明,我将在这里粘贴模型 public class Entidad { [Key] public int Id { get; set; }
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; }
}
公共类实体
{
[关键]
公共int Id{get;set;}
公共字符串Nombre{get;set;}
公共虚拟ICollection Propiedades{get;set;}
}
公共类Propiedad
{
[关键]
公共int Id{get;set;}
公共虚拟实体{get;set;}
公共字符串Codigo{get;set;}
公共字符串Nombre{get;set;}
公共字符串TipoDeDatos{get;set;}
}
公共级商场
{
[关键]
公共int Id{get;set;}
公共字符串Nombre{get;set;}
公共字符串NIT{get;set;}
公共字符串nombrepresentantelegal{get;set;}
公共字符串telefonorepresentatelegal{get;set;}
公共字符串NombreContacto{get;set;}
公共字符串TelefonoContacto{get;set;}
[列(TypeName=“xml”)]
公共字符串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"];
}
@model Inspinia\u MVC5.Areas.GlobalAdmin.Models.Empresa
@{
ViewBag.Title=“创建”;
Layout=“~/Areas/GlobalAdmin/Views/Shared/\u layoutlobaladmin.cshtml”;
变量propiedades=(列表)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>
阿迪西奥纳莱斯酒店
@foreach(在Pinia_MVC5.Areas.GlobalAdmin.Models.Propiedad中的Propiedad和Propiedad)
{
如果(propiedad.TipoDeDatos==“Texto”)
{
@Label(propiedad.Nombre,新的{@class=“control Label col-md-2”})
@*@LabelFor(prop=>propiedad.Nombre,新的{@class=“controllabel col-md-2”})*@
@编辑器(propiedad.Nombre)
@ValidationMessageFor(prop=>propiedad.Nombre)
}
}
在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();
}
public ActionResult Create()
{
var listFields=来自db.Propiedades中的b
其中b.Entidad.Nombre==“Empresa”
选择b;
ViewData[“CamposAdicionales”]=listFields.ToList();
返回视图();
}
这呈现了一个很好的形式,如下所示:
但是,我不知道的是,如何从Empresa(公司)实体获取这些动态表单字段并获取这些值以将它们保存在XML字段中。呈现页面后,单击“查看源”,并查看您创建的输入字段的名称,它应该是每个propiedad.Nombre中的值,在服务器端,您可以通过
请求[“fieldname”]
访问此字段的值,
因此,对于每个项目,通过
Request[propiedad.Nombre]