【问题标题】:tow foreach ​​of IEnumerable on cshtmlcshtml上IEnumerable的拖拽foreach
【发布时间】:2013-09-24 07:18:41
【问题描述】:

我想填充一个 IEnumerable 以构建一个循环以按数组长度贯穿我。该值将被添加到函数中发生 2 次的结果列表中,即 Seaons 和 Categories。每个数组的长度为两个值。如果我现在花在 .cshtml 中,当两个值之一更高时,我会得到所有内容两次

        // Set List
        List<Template> result = new List<Template>();
        List<TemplateList> tmp_list = new List<TemplateList>();

        // Categories
        string[] Categories_Array = TemplateModel.GetRoomCategories.Split(',');
        // SeasonData
        string[] SeasonData_Array = TemplateModel.GetSeasonsData.Split(',');

        for (int i = 0; i < Categories_Array.Length; i++)
        {
            string[] Categories = Categories_Array[i].Split(';');                
            tmp_list.Add(new TemplateList { CategoreList = Categories[0], PriceList = "125,00" });

            for (int a = 0; a < SeasonData_Array.Length; a++)
            {
                string[] SeasonData = SeasonData_Array[a].Split(';');
                result.Add(new Template { GetSeasonsData = SeasonData[0] });
            }
        }

        result.Add(new Template { TemplateLists = tmp_list });

        return result.AsEnumerable();

cshtml

<table class="table" cellpadding="0" cellspacing="0" border="0">
<tr>
    <th class="header">Season</th>
    @foreach (var item in Model)
    { 
        <th class="header">@item.GetSeasonsData</th>
    }
</tr>
<tr>
    <td>
        <table cellpadding="0" cellspacing="0" border="0">
            @foreach (var item in Model)
            { 
                foreach (var extra in item.TemplateLists)
                {
                    <tr class="double">
                        <td class="roomlist">@extra.CategoreList</td>
                        <td class="pricelist">@extra.PriceList</td>
                    </tr>
                }
            }
        </table>
    </td>
</tr>

数组: 分类EZ;1,DZ;2Summer;01.12.2013;31.12.2013,Winter;01.06.2013;31.06.2013

仅当有 3 个类别时,只有 1 个季节仍然可用 3 个“tr”,因为季节没有加载任何内容

谢谢

【问题讨论】:

  • 您能否添加一些字符串TemplateModel.PasswordTemplateModel.User 包含的示例?

标签: c# asp.net-mvc-3 ienumerable


【解决方案1】:

您实际上创建了两次模板,一组仅包含密码,另一组仅包含用户名。您也没有在第二个循环中循环通过 User_Array。如果你想用用户名和密码创建一个List&lt;Template&gt;,试试这个:

List<Template> result = new List<Template>();

// Password
string[] Password_Array = TemplateModel.Password.Split(',');
// User
string[] User_Array = TemplateModel.User.Split(',');

for (int i = 0; i < User_Array.Length; i++)
{
    string[] users = User_Array[i].Split(';');

    // stop it blowing up if there are fewer passwords than usernames 
    // given that we are indexing against the username array
    string password = string.Empty;
    if (Password_Array.Length > i) {
        string[] passwords = Password_Array[i].Split(';');
        password = passwords[0];
    }

    result.Add(new Template { User = users[0], Password = password });
}

旁注:您可能希望使用Dictionary&lt;string, string&gt; 和用户名作为键,而不是 2 个数组。

【讨论】:

  • THXX!!!!!! :)))))) 但是当 Password_Array 更长的时候呢?值可以是不同的长度
  • 那么您将丢失额外的密码。是否会出现密码和用户名的数量不一样的情况?如果它是一个明确的否,那么你可以删除检查,一切都会好起来的。我只是对它进行防御性编码,以免出错。
  • 变量只是占位符,问题是它们在很长一段时间内可能有足够的不同并且必须仍然可用。 Cshtml 经常出现和存在
  • 您还有什么问题?你能用你现在使用的代码更新问题并解释什么仍然不起作用吗?
  • 好的,我更新了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-09
相关资源
最近更新 更多