使用onServerClick获取href值

时间:2015-03-11 02:02:51

标签: c# asp.net href

我正在使用asp.net和c#

我有一个链接列表,我想在后面的代码中获取href值。

到目前为止,我有:

<li><a href="#?id='101'" runat="server" onServerClick="room_click">Room 101</a></li>
<li><a href="#?id='102'" runat="server" onServerClick="room_click">Room 102</a></li>
<li><a href="#?id='103'" runat="server" onServerClick="room_click">Room 103</a></li>

protected void room_click(object sender, EventArgs e)
{
}

问题是我无法找到获得href值的解决方案,我尝试了锚或正则表达式,但它不起作用。

3 个答案:

答案 0 :(得分:5)

您必须将发件人强制转换为HtmlAnchor,以便您可以访问该属性:

    public void room_click(object sender, EventArgs e)
    {
        var href = ((System.Web.UI.HtmlControls.HtmlAnchor)sender).HRef;
    }

答案 1 :(得分:2)

protected void room_click(object sender, EventArgs e)
{
    var anchor = sender as HtmlAnchor;
    if (anchor == null)
        return;

    var href = anchor.HRef;
    //--do something
}

答案 2 :(得分:2)

你的onServerClick无论如何都会覆盖你的href,而是会导致回发...所以我建议你只删除所有内容,然后只需:{/ p>

<li><a href="?id=101">Room 101</a></li>
<li><a href="?id=102">Room 102</a></li>
<li><a href="?id=103">Room 103</a></li>

然后在你的代码背后:

protected void Page_Load(object sender, EventArgs e)
{
    RoomClick();
}

private void RoomClick()
{
    int roomId = 0;
    //check to see if the id in the querystring exists and that it parses as an int.
    if (!String.IsNullOrEmpty(Request.QueryString["id"]) && Int32.TryParse((Request.QueryString["id"]), out roomId))
    {
        //do something with roomId
    }
}

在我看来,这种方式似乎更直接/更容易使用。 Jason的回答也适用于你。我认为这条路线令人困惑,因为虽然你可以阅读href并获得该值,但你无法从URL中读取#值......这只是一种标准方式完成你想要完成的事。另外,你是如何计划轻松地从href中取出房间#?

我喜欢这条路线的另一个原因是你可以将某人直接链接到一个房间而不告诉他们先点击一下......如果id在那里,它会加载房间信息或者你在做什么

更新:如果您不想要网址中的房间信息并且仍然想要“回复”方式,我的建议仍然是不同的路线。而是使用LinkButton这将是一种更“传统”的方式(在ASP.NET Web窗体中)来进行PostBack并传递数据:

相反,请使用标记:

<li><asp:LinkButton ID="_room104" OnCommand="RoomCommand" CommandArgument="104" Text="Room 104" runat="server"></asp:LinkButton></li>
<li><asp:LinkButton ID="_room105" OnCommand="RoomCommand" CommandArgument="105" Text="Room 105" runat="server"></asp:LinkButton></li>

然后编写代码:

protected void RoomCommand(object sender, CommandEventArgs e)
{
    int roomId = 0;
    if (Int32.TryParse((string)e.CommandArgument, out roomId)) {
        //do something with roomId
    }
}