【问题标题】:Using dictionaries with ASP.NET MVC4在 ASP.NET MVC4 中使用字典
【发布时间】:2025-11-29 23:00:01
【问题描述】:

在我看来:

<tbody>
    @foreach (var item in Model)
    {

        foreach (KeyValuePair<string, Dictionary<string, int>> fs in item.dicFS)
        {
            <tr>
                <td>@Html.DisplayFor(modelItem => fs.Key.ToString())</td>

                @foreach (KeyValuePair<string, int> lbl in item.dicFS[fs.ToString()])
                {
                    <td>@Html.DisplayFor(modelItem => lbl.Value.ToString())</td>
                }

            </tr>
        }
    }
</tbody>

错误:

An exception of type 'System.InvalidOperationException' occurred in   System.Web.Mvc.dll but was not handled in user code

Additional information: Templates can be used only with field access, property access, single-dimension array index, or single-parameter custom indexer expressions.

这是应用程序崩溃时突出显示的行

 <td>@Html.DisplayFor(modelItem => fs.Key.ToString())</td>

我的模型包含一个公共字典,其中包含一个字符串键和一个字典值(嵌套字典)

    public Dictionary<string, Dictionary<string, int>> dicFS;

键和嵌套字典被初始化,值由模型内的方法分配。

我不能使用字典吗?我是否必须将模型的数据类型转换为嵌套数组而不是使用嵌套字典?

提前感谢您的帮助!

【问题讨论】:

    标签: asp.net-mvc-4 dictionary


    【解决方案1】:

    您不能在DisplayFor() 方法中使用.ToString()

    只需删除 .ToString() 就可以了

    <tbody>
        @foreach (var item in Model)
        {
    
            foreach (KeyValuePair<string, Dictionary<string, int>> fs in item.dicFS)
            {
                <tr>
                    <td>@Html.DisplayFor(modelItem => fs.Key)</td>
    
                    @foreach (KeyValuePair<string, int> lbl in item.dicFS[fs.ToString()])
                    {
                        <td>@Html.DisplayFor(modelItem => lbl.Value)</td>
                    }
    
                </tr>
            }
        }
    </tbody>
    

    【讨论】:

    • 好吧,我会被诅咒的......我期待一些复杂的解决方案。我不知道。谢谢!