如何从不直接在模型中的属性获取 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字段中。

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

页面呈现后,单击查看源代码,并查看您创建的输入字段的名称,它应该是每个属性中的值。Nombre ,在服务器端你可以通过 Request["fieldname"] 访问此字段的值,因此,对于每个项目,通过以下方式获取其价值

Request[propiedad.Nombre]