如何从LiteralControl获取href

本文关键字:获取 href LiteralControl | 更新日期: 2023-09-27 18:26:07

我需要从LiteralControl中读取href并为其添加一些属性:

标记;

<a id="aMyAnchor" runat="server" href="bob.com">click me</a>

以下是我尝试过的:

string url= "bob.com";
var myAnchor = divLinkContainer.Controls
    .Cast<LiteralControl>()
    .Where(a => a.Attributes["href"]
    .Contains(url)).First();

但是,LiteralControl没有attributes属性。。。

注意:我知道我可以通过它的id直接访问链接,但这只是因为我简化了示例代码

编辑:

此:

string url= "bob.com";
var myAnchor = divLinkContainer.Controls
    .Cast<HtmlAnchor>()
    .Where(a => a.HRef
    .Contains(url)).First();

结果如下:

无法将类型为"System.Web.UI.LeralControl"的对象强制转换为类型"System.Web.UI.HtmlControls.HtmlAnchor".

如何从LiteralControl获取href

您的divLinkContainer节点可能包含其他无法强制转换为HtmlAnchor类型的节点。要仅选择类型为HtmlAnchor的节点,请使用Enumerable.OfType:

var myAnchor = divLinkContainer.Controls
    .OfType<HtmlAnchor>()
    .Where(a => a.HRef.Contains(url))
    .First();
var myAnchor = divLinkContainer.Controls
    .Cast<Control>()
    .Where(a => a is HtmlAnchor).Select(a=>(HtmlAnchor)a)
    .Where(a => a.HRef.Contains(url))
    .First();

我们的想法是将Cast与最可能/最相关的基类一起使用,并确保所有将要强制转换的控件都继承该类型。

将其转换为HtmlAnchor,然后可以使用它的href属性。

您可以将所需的目标对象强制转换为"HtmlAnchor"类型,并使用"HRef"属性进行操作。

将href分配给另一个控件的value属性并隐藏该控件。