【问题标题】:In href, ~ is not working when binding from code behind在 href 中,从后面的代码绑定时 ~ 不起作用
【发布时间】:2013-04-12 14:12:01
【问题描述】:

当从后面的代码绑定 href 标记时,它不起作用。这是我的 aspx 代码。当我直接将 <a> 标签放在 aspx 上时,它正在工作,而当我通过 Response.write 进行操作时,它正在读取 ~ ,而不是根目录。

<% Response.Write("<a id=\"A1\" runat=\"server\" class=\"menuItem\" href=\"~/HR/Emp/EmpDetails.aspx?mid=167\">My PIPs</a> "); %> 

<a id="A1" runat="server" class="menuItem" href="~/HR/Emp/EmpDetails.aspx?mid=167">My PIPs</a> 

通过文字绑定也不起作用

Literal.text = "<a id=\"A1\" runat=\"server\" class=\"menuItem\" href=\"~/HR/Emp/EmpDetails.aspx?mid=167\">My PIPs</a> "; 

请帮忙。

these are the HTML tags
<ul id="jMenu">
    <li>
      <a  runat="server" class="fNiv" href="~\Default.aspx?mid=1&">Home</a> 
      </li>
    <li>
      <a  runat="server" class="fNiv" href="">Human Resources</a> 
    <ul>
      <li class="arrow" /> 
       <li>
      <a runat="server" class="menuItem" href="~\HR\EMP\PIPWorkFlow.aspx?mid=166">Performance Improvement Plan (PIP)</a> 
    <ul>
    <li>
      <a runat="server" class="menuItem" href="~\HR\EMP\PIPWorkFlow.aspx?mid=171">Data Protection Statement</a> 
      </li>
    <li>
      <a runat="server" class="menuItem" href="~\HR\EMP\EmpPIPDetails.aspx?mid=167">My PIPs</a> 
      </li>
    <li>
      <a runat="server" class="menuItem" href="~\HR\EMP\PIPHome.aspx?mid=168">Team PIPs</a> 
      </li>
    <li>
      <a runat="server" class="menuItem" href="~\HR\EMP\HRPIPHistory.aspx?mid=169">Employee PIPs</a> 
      </li>
    <li>
      <a runat="server" class="menuItem" href="~\HR\EMP\AppraisalRatingUpload.aspx?mid=170">Upload Appraisal Ratings</a> 
      </li>
    <li>
      <a runat="server" class="menuItem" href="~\HR\EMP\PIPRoleAssignment.aspx?mid=472">PIP Spoc Role Assignment</a> 
      </li>
      </ul>
      </li>
      </ul>
      </li>
    <li>
      <a runat="server" class="fNiv" href="~\ContactUs.aspx?mid=39">Contact Us</a> 
      </li>
      </ul>

这些是 html 标签...如果我们将这些标签与 Literal 或 div 或 TD 绑定...它们正在读取 ~ 签名... 如果我将这些标签直接放在 HTML 中,它工作得很好

【问题讨论】:

  • 请提供完整代码..
  • 显示您正在讨论的代码会有所帮助

标签: asp.net


【解决方案1】:

Response.WriteLiteral.Text 输出你给他们的任何东西,不做任何处理。

这意味着你给这些方法/属性的任何东西都将被逐字输出。不会进行 URL 解析,runat=server 属性没有意义。

您可以使用Control.ResolveClientUrl() method 自己生成链接,或在代码隐藏中将链接作为服务器控件进行操作。

选项 1

// this line is fine
string url = ResolveClientUrl("~/some-url/foo.aspx");

// this line is quite ugly, but should work
var lit = new Literal { Text = "<a href='" + url + "'>a link</a>" };

// add it the page/control's control hierarchy
this.Controls.Add( lit );

选项 2

// instantiate the control dynamically
// URL resolution is done automatically
var lnk = new HtmlAnchor { HRef = "~/some-url/foo.aspx" };

// add it the page/control's control hierarchy
this.Controls.Add( lnk );

选项 3

假设您必须处理一个字符串,而不是控制层次结构(根据 cmets)。这并不理想,但如果字符串中的 URL 是相对于应用程序根的,则有可能。

// resolve the application root
string root = ResolveClientUrl("~/");

// string of raw HTML
string html = "<a href=\"~/HR/Emp/EmpDetails.aspx?mid=167\">My PIPs</a>";

// replace the urls with a resolved version
// this is very simplistic...a proper parser would be more reliable
html = html.Replace( "~/", root + "/" );

// output as desired
Response.Write( html );

【讨论】:

  • 感谢您的快速回复。实际上这个 Html 内容是动态地来自 XSLT。我们将 JMenu 用于数据库驱动的菜单。将 XSLT 转换为 HTML 标记后... href 不起作用 标记
  • 您的 HTML 中是否包含来自 XSLT 的 ~/?还是稍后再添加?
  • 从 XSLT 转换中获取这些 html 标签
  • RBT报告
  • ~/ 来自 xslt... 我们以后不会添加它
  • 好的。一种解决方案(有点难看)是解析 ~/,然后使用更新的 URL 对您的字符串进行查找/替换。请稍等,我将添加一个这样做的示例。
  • 猜你喜欢
    相关资源
    最近更新 更多
    热门标签