C# 如何在asp.net mvc中从不直接在模型中的属性获取表单值

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; }

我正在尝试创建一个表单,该表单将具有基于模型的一些标准属性,但用户将能够扩展这些属性

所以我有一个实体叫做实体,另一个实体叫做财产,另一个实体叫做公司。实体可以有一个属性列表(如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; }

    }
公共类实体
{
[关键]
公共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]