循环调用调用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>
元素。
我认为如果您的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。