gpt4 book ai didi

asp.net - 为什么 ASP.Net 重写 runat=server anchor 控件的相对路径?

转载 作者:太空狗 更新时间:2023-10-29 15:36:37 26 4
gpt4 key购买 nike

我的 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 会重写这些控制路径,有没有一种优雅的方法来修复它?

我只想让 anchor 控件准确地输出我告诉它的内容!!!有那么难吗?

编辑:

我基本上完成了 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);

从本质上应该是简单轻量级 anchor 所需的代码量可以看出,它并不是最佳解决方案。我知道我可以使用 Literal,但我认为这更简洁,因为我添加了多个 anchor 。

不过,我很想知道为什么 ASP.Net 会接管并尝试修复我的 URL。

最佳答案

为什么你有runat="server"没有 ID定义?你需要访问它的服务器端吗?如果删除 runat="server"一切都会按预期工作。

有关 ASP.NET 如何处理路径的更多信息,请查看此 MSDN article .

编辑:您可以通过使用 Literal 来绕过这个问题。控制然后输出原始 <a href...

例如:

<asp:Literal ID="myLiteral" runat="server" />

myLiteral.Text = "<a href=\"./?pg=1\">link text</a>";

然后你可以在 Literal 上设置 visible 属性随心所欲。

关于asp.net - 为什么 ASP.Net 重写 runat=server anchor 控件的相对路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2508892/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com