Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.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 - Fatal编程技术网

C# 在ASP.NET中将公共字符串变量打印到页面

C# 在ASP.NET中将公共字符串变量打印到页面,c#,asp.net,C#,Asp.net,这里忽略了一些基本的东西,但我正在尝试设置一个变量,并将其打印在页面上的几个地方。 代码隐藏: public string myVariable { get {return "40"; } } 第页: 输出: <link rel="stylesheet" type="text/css" href="/css/main.css?v=&lt;%=myVariable %>" /> 这似乎与引号有关,因为当我把它带到href之外时,它就起作用了。我发现,如果我在代

这里忽略了一些基本的东西,但我正在尝试设置一个变量,并将其打印在页面上的几个地方。 代码隐藏:

public string myVariable { get {return "40"; } }
第页:


输出:

<link rel="stylesheet" type="text/css" href="/css/main.css?v=&lt;%=myVariable %>" />

这似乎与引号有关,因为当我把它带到href之外时,它就起作用了。我发现,如果我在代码段中放置一个字符串,效果会很好

这是可行的,但不是我想要的:

<link rel="stylesheet" type="text/css" href="/css/main.css?v=<%="40"%>" />


这种行为背后的逻辑是什么?我需要做什么才能让它起作用?我还可以选择一种更优雅的方法来实现这一点。

好吧,整个属性必须是一个代码块,如:

href='<%= "css/main.css?v=" + myVariable %>'
href=''
试试这个:

<link rel="stylesheet" type="text/css" href=<%="/css/main.css?v="+myVariable %> />

您需要单引号引用html属性,如下所示:

<link rel="stylesheet" type="text/css" href='/css/main.css?v=<%=myVariable%>' />

我一直在使用它,特别是在我想创建锚定标记的中继器中

<a href='PageToLinkTo.aspx?id=<%# DataBinder.Eval(Container.DataItem, "Id")%>'>Link Text</a>


这将只在aspx页面的正文中起作用。如果您的aspx页面的标题部分有链接标签,请查看此问题以了解更多信息:

我今天确实遇到了同样的问题,并使用一个解决方案解决了此问题

您的代码将如下所示:

<link rel="stylesheet" type="text/css" href="/css/main.css?v=<%$ Code:myVariable%>" />
<link rel="stylesheet" type="text/css" <%= ("href='/css/main.css?v=" + myVariable + "'") %> />

我使用的一个很好的教程可以找到,我可以修改它以适合我的应用程序。如果您需要在服务器端控件中添加代码,这也会起作用

这真的很容易实现

以下是我添加到我的web.config中的内容:

   <compilation debug="true">
      <expressionBuilders>
        <add expressionPrefix="Code" type="CodeExpressionBuilder"/>
      </expressionBuilders>
   </compilation>
Imports Microsoft.VisualBasic
Imports System.Web.Compilation
Imports System.CodeDom

<ExpressionPrefix("Code")> _
Public Class CodeExpressionBuilder
    Inherits ExpressionBuilder

    Public Overrides Function GetCodeExpression(ByVal entry As BoundPropertyEntry, ByVal parsedData As Object, ByVal context As ExpressionBuilderContext) As CodeExpression
        Return New CodeSnippetExpression(entry.Expression)
    End Function

End Class

在我的App_Code文件夹中,我创建了ExpressionBuilder.vb

   <compilation debug="true">
      <expressionBuilders>
        <add expressionPrefix="Code" type="CodeExpressionBuilder"/>
      </expressionBuilders>
   </compilation>
Imports Microsoft.VisualBasic
Imports System.Web.Compilation
Imports System.CodeDom

<ExpressionPrefix("Code")> _
Public Class CodeExpressionBuilder
    Inherits ExpressionBuilder

    Public Overrides Function GetCodeExpression(ByVal entry As BoundPropertyEntry, ByVal parsedData As Object, ByVal context As ExpressionBuilderContext) As CodeExpression
        Return New CodeSnippetExpression(entry.Expression)
    End Function

End Class
导入Microsoft.VisualBasic
导入System.Web.Compilation
导入System.CodeDom
_
公共类CodeExpressionBuilder
继承ExpressionBuilder
公共重写函数GetCodeExpression(ByVal条目作为BoundPropertyEntry,ByVal parsedData作为对象,ByVal上下文作为ExpressionBuilderContext)作为CodeExpression
返回新的代码片段表达式(entry.Expression)
端函数
末级

这就是我所做的全部工作。

你为什么不这样做:

<link rel="stylesheet" type="text/css" href="/css/main.css?v=<%$ Code:myVariable%>" />
<link rel="stylesheet" type="text/css" <%= ("href='/css/main.css?v=" + myVariable + "'") %> />



严格来说,您有一个带有getter的公共属性,而不是一个变量。出于好奇,link标记是否在您的aspx页面的head标记中?link标记在我的页面的head标记中。我现在明白这是多么重要。或者可能是
实际上,为了得到我需要的所有报价,我可以这样做。虽然这看起来很可笑,但我仍然不明白为什么属性在这个实例中不起作用,而字符串文字会起作用。JS将原始href解析为字符串(服务器上没有任何内容)。此版本返回服务器生成的字符串。有意义吗?@ic3b3rg By JS你是说Javascript吗?没有涉及javascript。我的设置和回答都完全在服务器上执行。你说得对。。。我的意思是,它被解释为一个HTML字符串,它的作用与我上面的问题案例相同。更糟糕的是,它似乎获取了一个物理路径并将其附加到开头。单引号不能修复它,也不涉及DataBinder。我肯定没有容器。使用First代码示例,它肯定能工作。。第二个代码示例只是一个如何在中继器中使用它的示例。关键是你必须像so href='link?paramval='Ok那样设置你的属性,所以我要在这里指出,你的链接标签在你的aspx页面的头标签内。。。不久前,我遇到了另一个标记的类似问题,因为asp.net将head标记中的链接视为服务器控件。查看此问题了解更多信息我将其直接粘贴到我的页面中,页面呈现-。我认为浏览器正在将单引号替换为双引号,但服务器并没有替换变量。你是对的。该问题与头部的链接标签无关。多方便啊。你的链接正是我需要的。伙计,这真是奇怪的行为。@LeRoy-编辑了我的答案,展示了我所做的一切。对不起,它是用VB编写的。我很欣赏所有的代码。这似乎有点过分了。在阅读链接时,您似乎需要处理将代码块插入服务器控件属性/属性的问题。我真的只是想打印到页面上。也许我的问题是相关的,但我不寒而栗地认为这是做这件事的必要条件。这与我的问题有着比我最初想象的更多的关系。原来asp.net将链接标记视为服务器控件,因此这是一个潜在的解决方案。这是可行的,但没有任何意义为什么我必须将整个字符串移动到代码段中。这似乎是一个非常基本的需求。我可以给你这样做的原因是,无论是在这是写的html或文本时,网页是渲染回来,所以输出是一个字符串。。。但当您在href=”中放入一些代码时,当浏览器尝试将它们呈现为链接时,如果遇到任何特殊字符,它会将它们转换为各自的代码。。。不管怎么说,为什么您担心整个href是这样生成的,因为看到您的代码它将要编写myvariable。。。那么,写一个值或生成一个完整的href真的很重要吗???在这里进行的重写并不涉及浏览器。它之所以重要,是因为引号内的规则发生了变化。ASP.NET正在就是否解释自己的代码块做出明确的决定。一种解决方法,如将所有内容都放入代码块中,而在这种情况下有效,将导致我的页面中有大量内容是串联字符串中的双引号/单引号的混合体。