C#IF部分正常工作,但是,ELSE部分总是被执行

时间:2013-08-06 11:34:33

标签: c# asp.net asp.net-mvc-4 razor if-statement

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

foreach中的if部分工作正常,但是,即使它是真的,else部分也会被执行,这很奇怪。

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

提前感谢您的帮助!

(对我在我的代码中使用的荷兰语感到遗憾)

@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>
}

EDIT     这是我总是得到的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。编辑#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

因此即使输出'a + date',总会有'b'

2 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分: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)

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