Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC-使用数组值在模型字段中循环,例如模型。[数组值]_C#_Arrays_Asp.net Mvc_Model - Fatal编程技术网

C# ASP.NET MVC-使用数组值在模型字段中循环,例如模型。[数组值]

C# ASP.NET MVC-使用数组值在模型字段中循环,例如模型。[数组值],c#,arrays,asp.net-mvc,model,C#,Arrays,Asp.net Mvc,Model,我试图使用数组来循环模型字段 @Html.DisplayNameFormodel=>model.[fld],其中fld位于数组中 FLD见下面的代码。请让我知道怎么做 @model IEnumerable<SchoolAutomationSite.Models.tblClass> @{ ViewBag.Title = "List Of Classes"; } <h2>@ViewBag.Title</h2>

我试图使用数组来循环模型字段 @Html.DisplayNameFormodel=>model.[fld],其中fld位于数组中 FLD见下面的代码。请让我知道怎么做

@model IEnumerable<SchoolAutomationSite.Models.tblClass>

    @{
        ViewBag.Title = "List Of Classes";
    }

    <h2>@ViewBag.Title</h2>

    <p>
        @Html.ActionLink("Create New Class", "Create")
    </p>

    <table class="table">
        <tr>
这是数组

如何做到以上几行


您可以将dotNet对象转换为字典,然后遍历keys集合。这是我过去使用过的一种扩展方法:

    public static class ObjectExtensions
{
    /// <summary>
    /// Turns object into dictionary
    /// </summary>
    /// <param name="o"></param>
    /// <returns></returns>
    public static IDictionary<string, TVal> ToDictionary<TVal>(this object o)
    {
        if (o != null)
        {
            var props = TypeDescriptor.GetProperties(o);
            var d = new Dictionary<string, TVal>();
            foreach (var prop in props.Cast<PropertyDescriptor>())
            {
                var val = prop.GetValue(o);
                if (val != null)
                {
                    d.Add(prop.Name, (TVal)val);
                }
            }
            return d;
        }
        return new Dictionary<string, TVal>();
    }

}
然后这样称呼它:

var fields = Model.ToDictionary();
foreach (var key in fields.Keys) {
    <td>
        @fields[key]
    </td>
}
或者,使用flds阵列:

var fields = Model.ToDictionary();
foreach (var fld in flds) {
    <td>
        @fields[fld]
    </td>
}

数组是字符串[]flds,而不是字符串[]DisplayName。所以这不是问题,这只会降低视图代码的可读性,为什么不继续使用更详细的代码呢?这将只是flds{@fld}中的@foreach var fld-但是为什么要这样做呢?首先,我需要获取在标题中使用数组的显示名。其次,我需要使用数组来获取行值。此外,我可以在阵列中添加任何新的FLD,而无需更改下面的代码。您可能也想根据您尝试迭代的模型/对象筛选属性…我正在寻找一个简单的解决方案。而且它并没有真正回答这个问题,它确实为您提供了一种迭代模型属性的方法;这不是你想要的吗?一旦你知道你可以对属性/值做你想做的事情…你也可以看看这个StackOverflow问题,寻找一个替代方案:
var fields = Model.ToDictionary();
foreach (var key in fields.Keys) {
    <td>
        @fields[key]
    </td>
}
var fields = Model.ToDictionary();
foreach (var fld in flds) {
    <td>
        @fields[fld]
    </td>
}