【发布时间】:2011-01-31 07:42:37
【问题描述】:
我的 UserControls 在我的解决方案的 ~/Controls 文件夹中:
/Controls/TheControl.ascx
如果指定以下内容:
<a id="theId" runat="server" href="./?pg=1">link text</a>
ASP.Net 似乎想重写路径以指向绝对位置。例如,如果控件位于 site.com/products/fish/cans.aspx 上,则链接 href 将被重写为
<a id="munged_theId" href="../../Controls/?pg=1>link text</a>
为什么 Asp.Net 会重写这些控制路径,有没有优雅的方法来修复它?
我只想让锚控件准确地吐出我告诉它的内容!!!有那么难吗?
编辑:
我基本上已经按照 Kelsey 的建议做了。我知道我可以这样做,但是当我想要一些相对简单的东西时,我不喜欢在我的代码中添加标记。至少它解决了问题:
aspx 页面:
<asp:PlaceHolder ID="ph" runat="server"></asp:PlaceHolder>
代码隐藏:
var anchor = new HtmlGenericControl("a") { InnerText = "Previous" + " " + PageSize) };
anchor.Attributes["href"] = "?pg=" + (CurrentPage - 1);
anchor.Attributes["class"] = "prev button";
ph.Controls.Clear();
ph.Controls.Add(anchor);
正如您从本质上应该是一个简单且轻量级的锚所需的代码量中看到的那样,这并不是最佳解决方案。我知道我可以使用 Literal,但我认为这更干净,因为我要添加多个锚点。
我很想知道为什么 ASP.Net 接管并尝试修复我的 URL。
【问题讨论】:
-
只有微软知道为什么会发生不必要的事情。这就是为什么它们受到如此广泛的喜爱和尊重。
标签: asp.net html anchor relative-path