1

从后面的代码绑定 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 中,它工作得很好

4

1 回答 1

3

Response.WriteLiteral.Text输出您给他们的任何内容,无需处理。

这意味着您提供这些方法/属性的任何内容都将逐字输出。不会发生 URL 解析,并且该runat=server属性没有意义。

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

选项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

假设您必须处理一个字符串,而不是控制层次结构(根据评论)。这并不理想,但如果字符串中的 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 );
于 2013-04-12T05:46:20.363 回答