Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.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# 缺少匹配的结束标记_C#_Html_Asp.net Mvc_Razor_Html Table - Fatal编程技术网

C# 缺少匹配的结束标记

C# 缺少匹配的结束标记,c#,html,asp.net-mvc,razor,html-table,C#,Html,Asp.net Mvc,Razor,Html Table,我对一个相当复杂的表和Razor标签有一些问题 我拿出了最多的“@”。(如if等前面的e.x.) 我玩了大约30分钟,但我似乎找不到办法。我总是会得到错误,即/或类似者没有任何结束标记。我和,"等等"玩了一圈,就是弄不懂 如果有人能帮助我,如果有人能对:"标签"做出像样的解释,我将非常感谢 <div> if (Model.dsInfoUser.Tables[0].Rows.Count != 0) { <table>

我对一个相当复杂的表和Razor标签有一些问题

我拿出了最多的“@”。(如if等前面的e.x.)

我玩了大约30分钟,但我似乎找不到办法。我总是会得到错误,即/或类似者没有任何结束标记。我和,"等等"玩了一圈,就是弄不懂

如果有人能帮助我,如果有人能对:"标签"做出像样的解释,我将非常感谢

<div>
    if (Model.dsInfoUser.Tables[0].Rows.Count != 0)
    {
        <table>
            for (int i = 0; i < Model.dsInfoUser.Tables[0].Rows.Count; i++)
            {
                if (i % 2 == 1)
                {
                    <tr class="tableEven">
                }
                else
                {
                    <tr class="tableOdd">
                }
                    @*Picture*@
                    if (i == 0)
                    {
                        <td rowspan="@Model.dsInfoUser.Tables[0].Rows.Count" class="tblPicture"><img src="@Model.dsInfoUser.Tables[0].Rows[i][1]" /></td>
                    }
                    <td>
                        @Model.dsInfoUser.Tables[0].Rows[i][0].ToString()
                    </td> 
                    <td>
                        @Model.dsInfoUser.Tables[0].Rows[i][1].ToString()
                    </td> 
                </tr> 
                if (i == 5)
                {
                    <tr>
                        <td>
                            <text>Member Of:</text>
                        </td>
                            <td>
                                <table>
                                    for (int j = 0; j < Model.dsInfoUser.Tables[1].Rows.Count; j++)
                                    {
                                    if (j % 2 == 1)
                                    {
                                        <tr class="tableEven">
                                    }
                                    else
                                    {
                                        <tr class="tableOdd">
                                    }
                                        <td rowspan="3">
                                            <div style="width: 400px; overflow-y: scroll">

                                            </div>
                                        </td>
                                    </tr>
                                </table>
                            </td>
                    </tr>
                }
        </table>
    }
</div>

if(Model.dsInfoUser.Tables[0].Rows.Count!=0)
{
对于(int i=0;i
对于任何想知道的人,以下是固定版本:

<div>
    @if (Model.dsInfoUser.Tables[0].Rows.Count != 0)
    {
        <table>
            @for (int i = 0; i < Model.dsInfoUser.Tables[0].Rows.Count; i++)
            {
                <tr class="@(i % 2 == 1 ? "tableEven" : "tableOdd")">
                    @if (i == 0)
                    {
                        <td rowspan="@Model.dsInfoUser.Tables[0].Rows.Count" class="tblPicture"><img src="@Model.dsInfoUser.Tables[0].Rows[i][1]" /></td>
                    }
                    <td>
                        @Model.dsInfoUser.Tables[0].Rows[i][0].ToString()
                    </td> 
                    <td>
                        @Model.dsInfoUser.Tables[0].Rows[i][1].ToString()
                    </td> 
                </tr> 
                    if (i == 5)
                    {
                    <tr>
                        <td>
                            <text>Member Of:</text>
                        </td>
                            <td>
                                <table>
                                    @for (int j = 0; j < Model.dsInfoUser.Tables[1].Rows.Count; j++)
                                    {
                                        <tr class="@(i % 2 == 1 ? "tableEven" : "tableOdd")">
                                            <td rowspan="3">
                                                <div style="width: 400px; overflow-y: scroll">
                                                </div>
                                            </td>
                                        </tr>
                                    }
                                </table>
                            </td>
                    </tr>
                    }
            }
        </table>
    }
</div>

@if(Model.dsInfoUser.Tables[0].Rows.Count!=0)
{
@对于(int i=0;i
您不能这样做。Razor希望具有适当的层次结构。尤其是,这是非法的:

if(condition)
{
    <foo>
}
else
{
    <foo>
}
</foo>
if(条件)
{
}
其他的
{
}
尽管我们都知道这将是一个结构良好的
,razor并不这么认为。它看到了两个未关闭的
,以及一个完全不相关的

在您的情况下,这样做的方法是:

<tr class="@(i % 2 == 1 ? "tableEven" : "tableOdd")">
   <td>...</td>
</tr>

...
如果(i%2==1)
{
}
其他的
{
}
这可能是给你带来麻烦的原因

你应该可以把它重写为

 string className = i%2 == 1 ? "tableEven" : "tableOdd"
 <tr class="@className">
string className=i%2==1?“table偶数”:“table奇数”

让解析器高兴

这是Razor IMO中的一个缺陷。我不希望Razor能够对复杂的逻辑进行推理,但这里第一个块或第二个块将(无条件地)运行,所以它应该能够理解。PhpStorm可以用这种方式对定义的变量进行推理,所以Razor也应该能够。@Mark你确定PhpStorm不是更简单,在分支时遵循逻辑,只是按照每个分支中的指示去做吗?也就是说,不是真的弄明白了什么,只是服从了吗?区别是什么e?如果只有一个分支定义了变量,它会说“可能是未定义的变量”,但如果它们都有,则不会发出警告。可以随意调用它,但这是一种智能行为。@马克,razor确实会为“确定赋值”这样做,但我怀疑声明的作用域会相应地被限定。不同的语言,不同的策略。我不明白。标记肯定会在这里匹配,所以为什么它不能抑制错误?是设计决定,还是解析器根本没有那么复杂(还没有)?可能的重复
 string className = i%2 == 1 ? "tableEven" : "tableOdd"
 <tr class="@className">