如何为不在模型中的字段创建输入(editorfor)

How to create an input (editorfor) for a field not in the model

我的编辑视图中有以下内容

@model Inspinia_MVC5.Areas.GlobalAdmin.Models.Empresa
@{
    ViewBag.Title = "Edit";
    Layout = "~/Areas/GlobalAdmin/Views/Shared/_LayoutGlobalAdmin.cshtml";
    var camposAdicionalesEmpresa = (List<Inspinia_MVC5.Areas.GlobalAdmin.Models.Propiedad>)ViewData["CamposAdicionalesEmpresa"];
    var valoresCampoAdicionalesEmpresa = (Dictionary<string, string>)ViewData["ValoresCampoAdicionalesEmpresa"];

}

我的控制器是这样的:

public ActionResult Edit(int? id)
{
    var listFields = from b in db.Propiedades
                     where b.Entidad.Nombre == "Empresa"
                     select b;
    ViewData["CamposAdicionalesEmpresa"] = listFields.ToList<Propiedad>();
    if (id == null)
    {
        return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
    }
    Empresa empresa = db.Empresas.Find(id);
    if (empresa.PropiedadesExtra != null)
    {
        XElement xmlTree = XElement.Parse(empresa.PropiedadesExtra);
        Dictionary<string, string> dict = new Dictionary<string, string>();
        foreach (var el in xmlTree.Elements())
        {
            dict.Add(el.Name.LocalName, el.Value);
        }
        ViewData["ValoresCampoAdicionalesEmpresa"] = dict;
    }
    if (empresa == null)
    {
        return HttpNotFound();
    }
    return View(empresa);
}

ViewData["ValoresCampoAdicionalesEmpresa"] 是一个包含键值的字典,我需要在输入表单中显示该值。

在我的剃刀视图中,我有这个

@if (valoresCampoAdicionalesEmpresa != null)
{
    <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 camposAdicionalesEmpresa)
            {
                if (propiedad.TipoDeDatos == "Texto")
                {
                    var valor = valoresCampoAdicionalesEmpresa.Where(p => p.Key == propiedad.Nombre).First().Value;
                    <div class="form-group">
                        @Html.Label(propiedad.Nombre, new { @class = "control-label col-md-2" })
                        <div class="col-md-10">
                            @Html.Editor(valor)
                            @*@Html.ValidationMessageFor(prop => propiedad.)*@
                        </div>
                    </div>
                }
            }
        </div>
    </div>
}

如果我调试,valor 变量设置正确,但是在用户界面上,文本框是空的。

我怎样才能做到这一点?

如果您没有特别的理由使用编辑器,请将 @Html.Editor(valor) 替换为

@Html.TextBox("TextBoxName",valor)