无法在aspx的代码隐藏中使用变量

2w2cym1i  于 2023-08-08  发布在  .NET
关注(0)|答案(2)|浏览(122)

我试图根据代码隐藏中收集的信息为我的页面加载一个自定义的favicon。我有一个公共字符串属性ClientFavicon,它在我的aspx文件的代码隐藏中被正确填充,但似乎我无法使用它。下面是我的aspx文件的样子:

<%@ Page Language="c#" CodeBehind="page.aspx.cs" AutoEventWireup="True" Inherits="project.namespace" EnableViewState="True" Async="true" %>

<!DOCTYPE html>

<html lang="en">
<head runat="server">
    <meta charset="utf-8">
    <link href="<%=ClientFavicon%>" rel="shortcut icon" type="image/x-icon" />
    ...
    other head elements
    ...
</head>
<body>
    ...
    other page elements
    ...
</body>
</html>

字符串
和codebeath:

namespace project.namespace
{
    public class myclass
    {
        public string ClientFavicon { get; set; }

        private void Page_Load(object sender, EventArgs e)
        {
           ... 
           other code
           ...

           LoadClientFavicon();
        }

        private void LoadClientFavicon()
        {
            var clientFolder = "/images/client/";
            var favicon = string.Empty;

            if (HttpContext.Current.Session != null)
            {
                favicon = HttpContext.Current.Session[Global.SESSION_GLOBAL_CLIENT_FAVICON] != null
                    ? HttpContext.Current.Session[Global.SESSION_GLOBAL_CLIENT_FAVICON].ToString()
                    : "favicon.ico";
                ClientFavicon = clientFolder + favicon;
            }
        }
    }
}


然而,当我运行这个,我得到没有favicon和以下400错误在浏览器devtools网络选项卡:

https://website.url/aspxpage/%3C%=ClientFavicon%%3E


所以在我看来,它不把链接中的内容识别为变量,而只是文本。
对于favicon链接元素,我尝试过,但没有成功:使用单引号而不是双引号,删除等号,并添加runat="server"
我也试过在aspx页面的顶部放置一个代码片段<% var test = ClientFavicon; %>,并设置一个断点,test变量有正确的数据。我也无法让test在href中工作,上面的所有语法都是试错法。
最后,我尝试将填充ClientFavicon的方法从代码隐藏中移到页面顶部<head>标记之前的<% %>块中,并在那里使用变量,但我得到了相同的结果。
我已经看了一些与此相关的其他StackOverflow帖子,我不确定还能尝试什么,或者我是否错过了什么。

muk1a3rh

muk1a3rh1#

一位同事发现将link Package 在asp占位符中可以工作,因为<head>具有runat="server"

<asp:PlaceHolder runat="server">
    <link href="<%=ClientFavicon%>" rel="shortcut icon" type="image/x-icon" />
</asp:PlaceHolder>

字符串

ztyzrc3y

ztyzrc3y2#

尝试像这样更改链接:

<link href=<%=ClientFavicon%> rel="shortcut icon" type="image/x-icon" />

字符串
然后将引号作为变量的一部分:

ClientFavicon = "\"" + clientFolder + favicon + "\"";


您可能还需要设置 * 整个link实体 *:

<%=ClientFavicon%>


然后在代码隐藏中:

var q = "\"";
ClientFavicon = $"<link href={q}{clientFolder}{favicon}{q} rel={q}shortcut icon{q} type={q}image/x-icon{q} />";


由于这是Web Forms,您可能会使用一些对于字符串插值来说太旧的东西:

ClientFavicon = string.Format("<link href={0}{1}{2}{0} rel={0}shortcut icon{0} type={0}image/x-icon{0} />", "\"", clientFolder, favicon);

  • (我发现格式占位符比转义引号或逐字字符串更易读,因为它包含引号字符,但这是个人偏好。

相关问题