【问题标题】:using server variables in a href <%= xx %> with runat=server在带有 runat=server 的 href <%= xx %> 中使用服务器变量
【发布时间】:2010-11-29 18:34:56
【问题描述】:

当我在下面的 aspx 页面上使用锚标记时,

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

它将获得正确分配给 id 的变量值,但它不会正确路由页面,因为没有'a'标签上的 runat="server" 属性将无法评估 ~。但是一旦我添加了 runat 服务器属性,它就不再评估服务器变量名称了。有谁知道这是如何工作的,或者我应该怎么做才能兼顾两者?

【问题讨论】:

标签: c# asp.net


【解决方案1】:

尝试以下方法:

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

这仅在您不添加 runat="server" 时才有效。

【讨论】:

  • @Letseatlunch - 谢谢。更新了答案。老实说:我开发 asp.net 已经有好几年了。以为我会尝试一个答案。我认为我会远离asp.net 标签:D.
  • 是的,忘了resolveurl函数。非常感谢,它有效,正是我想要的。它是一个需要动态传递值的菜单项.. 所以..!
  • 如果您需要在非“页面/控件”上下文中使用 resolveUrl,可以创建解决方法:www.codeproject.com/KB/aspnet/resolveurl.aspx
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

    如果您想要 runat=server 和虚拟路径,您可以:

    1. 在后面的代码中设置 href。 Afaik MapPath 不会删除查询字符串。
    2. 如果您不想使用 MapPath,可以使用 MapPath 内部最有可能使用的 VirtualPathUtility。
    3. 如果你想在你的 .aspx 文件中绑定变量并且仍然需要 runat="server",那么你必须使用an expression builder。然后你的语法就变成了

      链接

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

    【讨论】:

    • 表达式生成器非常酷,我不知道。谢谢你让我知道。有没有一种简单的方法来声明页面变量并将其转换为表达式?
    • “页面变量”是什么意思?页面编译到的类的受保护字段?事实上,表达式生成器所做的是由 CodeDom 在 ASP.Net 的编译时调用的,并且该实现允许您发出任何您想要的代码。我很漂亮,您可以让 MyVars-expression 构建器发出代码以访问字段,尽管我还没有这样做。
    【解决方案4】:

    我不完全确定为什么runat="server" 会阻止对&lt;%= Property =&gt; 的评估,但您需要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);
    

    【讨论】:

    • 是的,但我不想使用超链接。 “resolveurl”函数成功了。
    • 是的,我在发布后就看到了 =) 很高兴你成功了!
    • 此解决方案不起作用:未解释服务器标签。
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签