在href<%= xx%>中使用服务器变量使用runat = server

时间:2010-11-29 18:34:56

标签: c# asp.net

当我在aspx页面上使用锚标记时,如下所示

<a href="~/pages/page.aspx?id=<%= ServervariableName %>"> test </a>

它将获得正确分配给id的变量值,但它不会正确地路由页面,因为如果没有'a'标记上的runat =“server”属性,将不会评估〜。但是一旦我添加了runat服务器属性,它就不再评估服务器变量名了。有没有人知道这是如何工作的,或者我应该做些什么来处理它们?

4 个答案:

答案 0 :(得分:12)

尝试以下方法:

href="<%= ResolveUrl("~/pages/page.aspx") + "?id=" + ServervariableName %>"

只有在您不添加runat="server"时才会有效。

答案 1 :(得分:2)

您无法使用此语法设置服务器端控件的属性。

相反,您可以在代码隐藏中设置属性,或者使用数据绑定语法(<%# expression %>)并在代码隐藏中调用DataBind()

答案 2 :(得分:2)

如果你想要runat = server和虚拟路径:

  1. 在代码中设置href。 Afaik MapPath不会删除查询字符串。
  2. 如果您不想使用MapPath,可以使用MapPath最有可能使用的VirtualPathUtility
  3. 如果要在.aspx文件中绑定变量但仍需要runat =“server”,则必须使用an expression builder。然后您的语法变为

    &lt; a href =“〜/ folder / page.aspx?id =&lt;%$ MyVars:ServerVariableName%&gt;” runat =“server”&gt;链接&lt; / a&gt;

  4. 如果你需要帮助,请告诉我。它对于自定义本地化和连接ASP.Net编译器非常有用(即不是C#/ VB编译器,而是可以编译ASPX页面的编译器)

答案 3 :(得分:-2)

我不确定为什么runat="server"阻止评估<%= Property =>,但您需要runat="server“来评估〜根。根据MSDN

  

你可以使用〜运算符   服务器中与路径相关的属性   控制。 〜运算符被识别   仅适用于服务器控件和服务器   码。你不能使用〜运算符   对于客户元素。

无论如何,这可能会让你前进。

ASPX

<asp:HyperLink ID="myHyperLink" runat="server" NavigateUrl="~/MyPage.aspx?id=<%=MyProperty %>" Text="Click Me" />

CS

myHyperLink.NavigateUrl = string.Format("~/MyPage.aspx?id={0}", MyProperty);