英文:
chatGPT is unable to answer: why VBScript's do until ... loop can be written in multiple<% %> code blocks?
问题
VBScript的do until ... loop是在多个<% %>代码块中编写的。
最近,我在一个.aspx文件中阅读了上面的这段代码块。这是一个需要维护的旧项目。
我对代码的风格感到惊讶。因为*do until ... loop*是在多个<%%>块中编写的,以插入更多<option>标签。这意味着<%%>块打破了完整的代码逻辑。
我已经搜索了解释,但在谷歌上还没有找到任何信息。我曾向ChatGPT提问,得到了代码的作用,但没有更深入的解释。
我想知道是否有人了解为什么代码可以被写成多个<%%>代码块,以及它是如何工作的,以及更深入的解释。
英文:
VBScript do until ... loop being written in multiple <% %> code blocks.
<select id="TaskID" name="TaskID" onChange="javascript: changeReportType(); OnClientsByAdviserReportSelected();">
<% prReports.MoveFirst()
Do Until prReports.AtEnd()
If CastDec(prReports("Requestable")) = 1D Then %>
<option <% If Convert.ToString(pnTaskID) = prReports("TaskID") Then %> selected <% End If %>
value="<%: prReports("TaskID").ToString & "-" & prReports("ReportName").ToString %>">
<%: prReports("DisplayName") %>
</option>
<% End If
prReports.MoveNext()
Loop %>
</select>
Recently, I've read this code block above in a .aspx file. This is an old project that need to be maintaining.
I was astonished by the style of the code. Because the do until ... loop is written in multiple <%%> blocks for inserting more <option> labels. That means the <%%> blocks break the complete code logic. I've searching for the explanation, but I got nothing on google yet. I've asked chatGPT and got the answer what the code doing but no more in-depth explanation. I wonder there are some one understand why the code can be written into multiple <%%> code blocks.
how does it work and its in-depth explanation.
答案1
得分: 0
这是一个WebForms应用程序吗?
如果是这样的话,那看起来是vb.net代码。
实际上,就像Pascal、C#或其他语言一样,把<%
看作是代码块的开始,%>
表示代码块的结束。
所以,我可以编写一些服务器端代码,放在标记中,像这样:
<%
Dim i As Integer
Dim j As Integer = 1
For i = 1 To 10
Response.Write(i & "<br/>")
j = j + 5
Next
Response.Write("<br/>")
Response.Write("<br/>")
Response.Write("<br/>")
Response.Write("Total for j = " & j)
%>
在上面的代码中有一些<br/>
等标记。对于更复杂的标记,通常在vb.net中编写这样的代码会变得"困难"。
因此,一些标记可以保留为客户端标记(任何不在<% server code here %>
的开放+关闭标记之内的内容都是客户端标记)。
所以,上面的代码可以这样编写:
<% Dim i As Integer %>
<% Dim j As Integer = 1 %>
<% For i = 1 To 10 %>
<%= i %><br />
<% j = j + 5 %>
<% Next %>
<br />
<br />
<br />
Total for j = <%= j %>
在上述代码中,我选择有"更多"的标记(客户端端标记),因此我必须开始服务器端代码,关闭服务器代码标记,然后接下来是常规的客户端标记。
上面的两个示例都产生相同的结果。
请记住,无论是在C#还是vb.net中编写,您都可以这样做。
但是,我认为Web Forms标记已经相当拥挤了,因此在有一个干净的代码后台代码模块时,很少有理由在标记中混合使用服务器代码。
因此,在aspx页面的标记部分编写代码块的情况非常少见。然而,在标记中使用表达式是一种常见的做法。
请注意,如果这是一个C#应用程序,您也可以执行上述操作。
因此,在使用C#时,上面的代码可以这样编写:
<% int i;%>
<% int j = 1;%>
<% for (i = 1;i <= 10;i++)
{
Response.Write(i.ToString()); %><br />
<% j = j + 5;
}
%>
<br />
<br />
<br />
Total for j = <%= j %>
因此,您不仅限于在vb.net中使用上述方法,当使用C#编写代码时,也有相同的方法和选项。
英文:
Is this a webforms application?
That being the case, then that looks to be vb.net code.
Really, like Pascal, C# or whatever? Think of the "<%" as a starting of a code block, and the "%>" as the end of a code block.
So, I could write some server-side code, place it in the markup like this:
<%
Dim i As Integer
Dim j As Integer = 1
For i = 1 To 10
Response.Write(i & "<br/>")
j = j + 5
Next
Response.Write("<br/>")
Response.Write("<br/>")
Response.Write("<br/>")
Response.Write("Total for j = " & j)
%>
In above have some br's etc. With more complex markup, then it often becomes “difficult" to write such code in vb.net.
So, some of the markup can remain client-side markup. (Anything outside of an open + closing tag of <% server code here %> then client-side markup follows.
So, above could be written like this:
<% Dim i As Integer %>
<% Dim j As Integer = 1 %>
<% For i = 1 To 10
Response.Write(i) %> <br/>
<% j = j + 5 %>
<% Next %>
<br />
<br />
<br />
Total for j = <% Response.Write(j) %>
So, in above, I choose to have "more" markup (client side), and thus I have to start server-side code, close the server code tag, and what follows is now regular client-side markup.
Both of above examples produces the same results:
Keep in mind, you can do this when writing c#, or vb.net.
However, I think web forms markup is already rather crowded, and thus very little reasons exists to inter-mix server code in markup when you have a nice clean code behind code module.
Thus rare does one need to write code blocks in the markup section of an aspx page. However, using expressions in the markup is a common practice.
Note that you can do the above if this is a C# application.
So, above could be written as this when using C#:
<% int i;%>
<% int j = 1;%>
<% for (i = 1;i <= 10;i++)
{
Response.Write(i.ToString()); %> <br />
<% j = j + 5;
}
%>
<br />
<br />
<br />
Total for j = <% Response.Write(j); %>
So, you not limited to using above with vb.net, and the same approach and option is available when writing code in C#.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论