簡體   English   中英

如何從屬性而不是直接在模型中獲取ASP.NET MVC中的表單值

[英]How to get form values in asp.net mvc from properties not directly in the model

我正在嘗試創建一個基於模型的表單,該表單將具有一些標准屬性,但是用戶將能夠擴展這些屬性。

因此,我有一個稱為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字段中。

呈現頁面后,單擊view-source,然后查看創建的輸入字段的名稱,它應該是每個propiedad.Nombre中的值。在服務器端,您可以通過Request["fieldname"]訪問該字段的值Request["fieldname"] ,因此對於每個項目,其價值取決於

Request[propiedad.Nombre]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM