【问题标题】:How to get form values in asp.net mvc from properties not directly in the model如何从不直接在模型中的属性获取asp.net mvc中的表单值
【发布时间】: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


    【解决方案1】:

    页面渲染完成后,点击view-source,可以看到你创建的输入字段的名称,应该是每个propiedad.Nombre中的值,服务器端可以通过@987654321访问该字段的值@, 所以对于每个项目,获取它的价值

    Request[propiedad.Nombre]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-24
      • 2023-02-07
      • 2017-11-15
      • 1970-01-01
      • 1970-01-01
      • 2017-06-13
      • 1970-01-01
      • 2017-09-16
      相关资源
      最近更新 更多