循环调用调用SQL过程的函数,但结果不显示在HTML中

本文关键字:调用 显示 HTML 结果 过程 SQL 函数 循环 | 更新日期: 2023-09-27 17:50:58

我遇到了一个奇怪的c#/HTML问题。我有一个CSHTML文件,其中包含以下代码。在一些生产站点(但不是全部)上,它似乎没有经过循环。查看HTML,列表中没有任何项。我的第一反应是ListTags没有被调用,但是嗅探SQL事务显示它调用了SQL函数,我可以在数据库上运行该函数并验证我得到了正确的值。我唯一的想法是,由于某种原因,第一个Razor代码部分中的语句并不是都被调用,使得count永远不会被设置为大于0,但这似乎不太可能。

<div>
    @{ List<String> stringList = Helper.ListTags(); int count = stringList.Count; int COL_WIDTH = 5;}
    <table style="width:100%">
        @for (int i = 0; i < count / COL_WIDTH; ++i)
        {
            <tr>
            @for (int j = 0; j < COL_WIDTH && i + j < count; ++j)
            {
                string tag = stringList[i * COL_WIDTH + j];
                string @tagId = "tag" + tag;
                <td>
                    <input type="checkbox" value=@tag id=@tagId onclick='checkboxSelected(this)' />@tag
                </td>
            }
            </tr>
        }
    </table>
</div>

有人知道是什么原因造成的吗?

正在讨论的服务器上表示的HTML是:

<div>
    <table style="width:100%">
    </table>
</div>

您可以看到,没有<TR>, <TD><INPUT>元素。

循环调用调用SQL过程的函数,但结果不显示在HTML中

我认为如果您的ListTags()方法返回的COL_WIDTH结果小于,则第一个@for循环中的条件将在第一次测试中失败。

假设ListTags()返回4个条目。计数将是4。表达式i < count / COL_WIDTH将返回false,因为count / COL_WIDTH返回0

因此,外部循环永远不会执行。

Try i ** <= ** count/COL_WIDTH

@for (int i = 0; i <= count / COL_WIDTH; ++i)

此外,我认为第二个循环中的条件是不正确的。

代替j < COL_WIDTH && i + j < count,考虑

j < COL_WIDTH && ((i*COL_WIDTH + j) < count)

想象ListTags()返回7个项目,COL_WIDTH仍然是5。

当i == 1呈现第二行时,您希望在第二项之后停止j循环。你的表达式不会在j==2处停止,因为你正在计算(2 < 5) && (3 < count),这不是真的。

在计算(2 < 5) && (1*5 + 2 < count)时,当i==1和j==2时,使用修改后的表达式停止,该值为false。