Проблема в теге Expression для привязки строковой переменной - PullRequest
2 голосов
/ 09 апреля 2011

Я связываю такой путь в теге

<link rel="stylesheet" media="screen" href='<%= AbsRoot_Path%>UserAccountTemp/css/reset.css' />

но он рендерит вот так ...

<link rel="stylesheet" media="screen" href="&lt;%= ConfigurationManager.AppSettings[&quot;rootpath&quot;].ToString() %>UserAccountTemp/css/reset.css" />

и работает тег.

в чем причина этого и каково решение?

UPDATE

для установки AbsRoot_Path

в web.config

<add key="rootpath" value="http://localhost:1259/WallProfile/"/>

и установить значение AbsRoot_Path

public string AbsRoot_Path = ConfigurationManager.AppSettings["rootpath"].ToString();

Ответы [ 2 ]

5 голосов
/ 09 апреля 2011

РЕДАКТИРОВАТЬ: ОК, я буду здесь более конкретным.

ASP.NET рассматривает <link> внутри <head> как элементы управления на стороне сервера, даже если вы этого не сделалиукажите runat="server" атрибут там.Таким образом, вы фактически устанавливаете свойство 'href' серверного элемента управления, поэтому вы получаете такие странные значения.Поэтому можно обойти это путем добавления свойства id для <link> и доступа к нему на стороне сервера:

<link id='lnkStylesheet' rel="stylesheet" media="screen" />

protected void Page_Init(object sender, EventArgs e)
{
    HtmlLink lnkStylesheet= (HtmlLink)Page.Header.FindControl("lnkStylesheet");
    lnkStylesheet.Href = AbsRoot_Path + "UserAccountTemp/css/reset.css";
}

или использовать решение, которое я предоставил в своем первоначальном ответе:

КажетсяВы определяете свой тег <link> внутри тега <head>, а ASP.NET не позволяет использовать там серверные конструкции.Но для этого есть простой способ: вы можете программно добавить <link> элемент управления (для этого используйте HtmlLink элемент управления на стороне сервера):

protected void Page_Init(object sender, EventArgs e)
{
    HtmlLink myHtmlLink = new HtmlLink();
    myHtmlLink.Href = AbsRoot_Path + "UserAccountTemp/css/reset.css";
    myHtmlLink.Attributes.Add("rel", "stylesheet");
    myHtmlLink.Attributes.Add("screen", "screen");

    Page.Header.Controls.Add(myHtmlLink);
}

Также определите свой AbsRoot_Path переменная как ConfigurationManager.AppSettings["rootpath"].ToString() немного избыточна, потому что ConfigurationManager.AppSettings["rootpath"] уже имеет тип string.

0 голосов
/ 09 апреля 2011

Вы должны добавить runat = server, если вы хотите, чтобы asp.net оценивал выражения, или он просто отображался во время написания ... так что попробуйте добавить runat = server, как это

<link runat=server rel="stylesheet" media="screen" href='<%= AbsRoot_Path%>UserAccountTemp/css/reset.css' />
...