【问题标题】:ASP.Net MVC: Html.Editor for dictionary entriesASP.Net MVC:用于字典条目的 Html.Editor
【发布时间】:2016-06-24 00:57:57
【问题描述】:

我正在尝试将@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 会更好,但在我真正的、非平凡的应用程序中,我是从TagHelper 内部调用IHtmlHelper.Editor(expression)...类似这样的:

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

TagHelperProcess方法中:

if (For != null)
{
    (_htmlHelper as HtmlHelper)?.Contextualize(ViewContext);
    tag.InnerHtml.Append(_htmlHelper.Editor(For.Name));
}

虽然我在TagHelper 中有ModelExpression(“For”),但我认为没有其他方法可以调用Editor,除非我已经尝试过。

感谢您的帮助!

【问题讨论】:

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


【解决方案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"])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 2015-11-24
    • 2015-04-05
    • 2018-01-21
    • 2011-07-08
    相关资源
    最近更新 更多