ASP.Net MVC:用于字典条目的Html.Editor

时间:2016-03-09 15:03:19

标签: asp.net-mvc html-helper asp.net-core-mvc tag-helpers

我正在尝试将@Html.Editor用于字典条目,但我无法让它工作。我正在运行ASP.Net Core 1.0。

示例模型:

public class TestModel
{
    public string Title { get; set; }
    public IDictionary<int, Fruit> Basket { get; set; }
}

这很好用:

@foreach (var key in Model.Basket.Keys)
{
    @Html.EditorFor(m => m.Basket[key])
}

但这不是:

@foreach (var key in Model.Basket.Keys)
{
    @Html.Editor($"Basket[{key}]")
}

在后者中,表达式Basket[1]等未解析,我总是得到一个空白文本框。如果我强制它使用我的Fruit编辑器模板,则模型始终为空。

我知道最好尽可能使用EditorFor,但在我真正的,非平凡的应用程序中,我从IHtmlHelper.Editor(expression)内部调用TagHelper ......这样的事情:< / p>

@foreach (var key in Model.Basket.Keys)
{
    <mytaghelper for="Baskey[key]" />
}

并使用TagHelper的{​​{1}}方法:

Process

虽然我if (For != null) { (_htmlHelper as HtmlHelper)?.Contextualize(ViewContext); tag.InnerHtml.Append(_htmlHelper.Editor(For.Name)); } 中有ModelExpression(“For”),但我认为还有另一种方法可以调用TagHelper,除非我已经尝试过。

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

  @Html.EditorFor(model => model.urDictionaryName["KeyValue"], new { htmlAttributes = new { @id = "yourId" } })

或者如果您希望将其用作标签,则可以将其用作标签,并使用hiddenfor进行映射

 @Html.Label(Model.urDictionaryName["KeyValue"])
 @Html.HiddenFor(model => model.urDictionaryName["KeyValue"], Model.maskDetails["KeyValue"])