如何从LiteralControl获取href?

时间:2012-02-28 20:13:11

标签: c# asp.net linq

我需要从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没有属性属性...

注意:我知道我可以通过其ID直接访问该链接,但这只是因为我使示例代码变得简单。

修改

此:

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

结果如下:

  

无法将类型为“System.Web.UI.LiteralControl”的对象强制转换为类型   'System.Web.UI.HtmlControls.HtmlAnchor'。

5 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:3)

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

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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