3

我必须承认我是 C# MVC 4 编程的新手,但我从未在任何其他编程语言中看到过如此奇怪的事情......

foreach 中的 if 部分运行良好,但是,即使它是 true,else 部分也会被执行,这很奇怪。

当我删除“@dag.Datum.ToString("dd/MM/yyyy")”时, if else 有效,但不幸的是,这不是我想要的。

提前感谢您的帮助!

(哦,对我在代码中使用的荷兰语感到抱歉)

@using (Html.BeginForm())
{
    <br /><br /><table>
    @foreach (var cursist in Model.Cursisten.Where(cursist => cursist.Soort == 1))
    {
        <tr>

            <th>@cursist.Email</th>

            @foreach (var dag in Model.Opleidingsdagen.Where(m => m.chked == true))
            {
                <td>

                    @foreach (var afw in Model.Afwezigheden)
                    {
                        if (afw.DagID.Equals(dag.DagID) && afw.CursistID.Equals(cursist.Email))
                        {
                            @:a @dag.Datum.ToString("dd/MM/yyyy")
                        }
                        else
                        {
                            @:b
                        } 
                    }

                </td>
            }


        </tr>
    }
    <tr>
        <td><br /><br /><input type="submit" value="Afwezigheden aanpassen" class="btn" /></td>
    </tr>
    </table>
}

编辑,这是我总是得到的 html 表输出:

testacc1@test.be     a 14/08/2013 b  b a 15/08/2013  b b
testacc2@test.be     b b     b b     b b
testacc3@test.be     b b     b b     b b

编辑#2 我的预期输出是:

testacc1@test.be     a 14/08/2013    a 15/08/2013 b
testacc2@test.be     b               b            b
testacc3@test.be     b               b            b

所以总是有一个'b',即使输出'a + date'

4

2 回答 2

4

没有错误,并且工作正常。您有 3 个嵌套的 foreach 循环,每个电子邮件地址产生 6 个输出,每个电子邮件地址产生 2 个输出<td>,在代码中放置一个断点并遵循逻辑。我 100% 确定这是你的错误,而不是 MS。

于 2013-08-06T12:12:11.210 回答
0

如果您尝试:

<text>a @dag.Datum.ToString("dd/MM/yyyy")</text>

在 if 语句中?

else由于行的格式,Razor 解析器可能会有点混乱并执行子句@:a @dag.Datum.ToString("dd/MM/yyyy")

编辑:

如果你尝试会发生什么

@foreach (var afw in Model.Afwezigheden)
{
    if (true)
    {
        @:a @dag.Datum.ToString("dd/MM/yyyy")
    }
    else
    {
        @:b
    } 
}

条款是否else也被执行?

编辑:

if啊,好的,根据您的评论,您的语句子句似乎正在返回false,否则我看不到该else子句如何执行。将每个部分提取到一个变量中:

bool idMatch = afw.DagID.Equals(dag.DagID);
bool emailMatch = afw.CursistID.Equals(cursist.Email);

if (idMatch && emailMatch)

如果失败,将更容易确定哪个相等。

于 2013-08-06T11:44:29.653 回答