Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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# ASP.NET-当服务器端脚本分隔符与标记中的文字内容组合出现时,为什么它们的行为会有所不同?_C#_Asp.net_Vb.net - Fatal编程技术网

C# ASP.NET-当服务器端脚本分隔符与标记中的文字内容组合出现时,为什么它们的行为会有所不同?

C# ASP.NET-当服务器端脚本分隔符与标记中的文字内容组合出现时,为什么它们的行为会有所不同?,c#,asp.net,vb.net,C#,Asp.net,Vb.net,我试图理解为什么ASP.NET脚本分隔符有时会被转义和呈现,而不是被替换,这取决于它们的位置和周围的标记,例如: 这将按预期工作,返回codebehindBASE\u URL变量或属性的内容作为页面标题: <title><%= BASE_URL %></title> 关于这个主题的wiki文章中没有涉及到这种微妙的差异:好的,这将是纯粹的猜测,但我想我还是会分享它。没有VS在手验证,所以希望你在发布前测试得足够好 首先,让我们忽略你的第一个例子,因为它是一种

我试图理解为什么ASP.NET脚本分隔符
有时会被转义和呈现,而不是被替换,这取决于它们的位置和周围的标记,例如:

这将按预期工作,返回codebehind
BASE\u URL
变量或属性的内容作为页面标题:

<title><%= BASE_URL %></title>

关于这个主题的wiki文章中没有涉及到这种微妙的差异:

好的,这将是纯粹的猜测,但我想我还是会分享它。没有VS在手验证,所以希望你在发布前测试得足够好

首先,让我们忽略你的第一个例子,因为它是一种不同的和简单的-它只是工作的预期。对于其余的示例,它们都是关于在双引号标记中声明代码呈现块的,模式似乎是:

  • 如果代码渲染块中有引号,则会识别该块
  • 如果没有引号,则无法识别块
所以我关于解析器如何工作的理论是这样的。当解析器在引号中遇到标记时,它会对其进行分析

  • 如果同时存在开头的
    和结尾的
    符号,则它会根据XML规则将它们转义为
    ,并且不会继续进行toke分析

  • 若只找到开始符号,它将其识别为代码呈现块开始,并在后续标记中搜索结束部分。如果找到了结束部分,则有一个完整的块,它只是一个
    响应。Write()
    执行。如果未按预期找到clostig标记,则会出现语法错误

  • 如果只找到结束符号,而之前未检测到开始符号,则这也是一个语法错误

  • 这似乎与你看到的相符。让我们用例子来说明

    <link href="<%= BASE_URL %>_/css/screen.css" rel="stylesheet">
    
    “\uu/css/screen2.css”
    是另一个带有
    。因此,这被识别为代码渲染块,并被视为
    “\uu/css/screen2.css”
    。与上一个示例相同


    同样,这只是一个推测,似乎符合观察到的行为。如果这被证明是错误的,或者有更好的答案,我很乐意删除。

    好的,这将是纯粹的猜测,但我想我还是会分享它。没有VS在手验证,所以希望你在发布前测试得足够好

    首先,让我们忽略你的第一个例子,因为它是一种不同的和简单的-它只是工作的预期。对于其余的示例,它们都是关于在双引号标记中声明代码呈现块的,模式似乎是:

    • 如果代码渲染块中有引号,则会识别该块
    • 如果没有引号,则无法识别块
    所以我关于解析器如何工作的理论是这样的。当解析器在引号中遇到标记时,它会对其进行分析

  • 如果同时存在开头的
    和结尾的
    符号,则它会根据XML规则将它们转义为
    ,并且不会继续进行toke分析

  • 若只找到开始符号,它将其识别为代码呈现块开始,并在后续标记中搜索结束部分。如果找到了结束部分,则有一个完整的块,它只是一个
    响应。Write()
    执行。如果未按预期找到clostig标记,则会出现语法错误

  • 如果只找到结束符号,而之前未检测到开始符号,则这也是一个语法错误

  • 这似乎与你看到的相符。让我们用例子来说明

    <link href="<%= BASE_URL %>_/css/screen.css" rel="stylesheet">
    
    “\uu/css/screen2.css”
    是另一个带有
    。因此,这被识别为代码渲染块,并被视为
    “\uu/css/screen2.css”
    。与上一个示例相同


    同样,这只是一个推测,似乎符合观察到的行为。如果这被证明是错误的,或者有更好的答案,我很乐意删除。

    您得到的错误是什么?“不工作”没有告诉我们任何事情服务器端标记和第2、3、4行中url路径其余部分之间的下划线看起来好像不属于那里。请提供更多信息(doctype/html/rest of page header、codebeard、results、messages)我编辑了您的问题以从“离题”投票中挽救出来,因为这让我自第一次学习ASP.NET以来一直感到困扰,而且是一个非常有效的问题。研究发现了许多关于代码呈现块的好文章(SO和其他),但没有一篇详细介绍这个特定问题。您遇到了什么错误?“不起作用”没有告诉我们任何事情服务器端标记和第2、3、4行中url路径其余部分之间的下划线看起来好像不属于那里。请提供更多信息(doctype/html/rest of page header、codebeard、results、messages)我编辑了您的问题以从“离题”投票中挽救出来,因为这让我自第一次学习ASP.NET以来一直感到困扰,而且是一个非常有效的问题。研究发现了许多关于代码渲染块主题的好文章(SO和其他),但没有一篇详细介绍这个特定问题。一旦证明这是正确的,应该将其作为旁注进行编辑-这是非常相关的。由于这种看似不稳定/不一致的行为,我总是不在标记中混合代码隐藏表达式和文字。razor语法非常聪明。一旦证明这是正确的,它应该作为一个旁注编辑成-这是非常相关的。由于这种看似不稳定/不一致的行为,我总是不在标记中混合代码隐藏表达式和文字。razor语法要聪明得多。
    <link href="<%= BASE_URL %>_/css/screen.css" rel="stylesheet">
    
    <link href="<%= "" + BASE_URL %>_/css/screen2.css" rel="stylesheet">