使用 onServerClick 获取 href 值
Get href value with onServerClick
我正在使用 asp.net 和 c#
我得到了一个 link 的列表,我想在后面的代码中获取 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 值的解决方案,我尝试了锚点或正则表达式但它不起作用。
您必须将发件人转换为 HtmlAnchor 才能访问 属性:
public void room_click(object sender, EventArgs e)
{
var href = ((System.Web.UI.HtmlControls.HtmlAnchor)sender).HRef;
}
protected void room_click(object sender, EventArgs e)
{
var anchor = sender as HtmlAnchor;
if (anchor == null)
return;
var href = anchor.HRef;
//--do something
}
你的 onServerClick
无论如何都会覆盖你的 href
而不是导致回发......所以我建议你把它全部删除并简单地拥有:
<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
中获得房间号?
我喜欢这条路线的另一个原因是你可以 link 某人直接进入房间而无需告诉他们先点击某些东西...如果 id
在那里,它将加载房间信息或您正在做的任何事情。
更新: 如果您不想要 URL 中的房间信息并且仍然想要 "PostBack" 方法,我的建议仍然是不同的路线。而是使用 LinkButton
,这将是一种更 "traditional" 的方式(在 ASP.NET Web 表单中)来执行回发并传递数据:
因此,改为使用如下标记:
<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
}
}
我正在使用 asp.net 和 c#
我得到了一个 link 的列表,我想在后面的代码中获取 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 值的解决方案,我尝试了锚点或正则表达式但它不起作用。
您必须将发件人转换为 HtmlAnchor 才能访问 属性:
public void room_click(object sender, EventArgs e)
{
var href = ((System.Web.UI.HtmlControls.HtmlAnchor)sender).HRef;
}
protected void room_click(object sender, EventArgs e)
{
var anchor = sender as HtmlAnchor;
if (anchor == null)
return;
var href = anchor.HRef;
//--do something
}
你的 onServerClick
无论如何都会覆盖你的 href
而不是导致回发......所以我建议你把它全部删除并简单地拥有:
<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
中获得房间号?
我喜欢这条路线的另一个原因是你可以 link 某人直接进入房间而无需告诉他们先点击某些东西...如果 id
在那里,它将加载房间信息或您正在做的任何事情。
更新: 如果您不想要 URL 中的房间信息并且仍然想要 "PostBack" 方法,我的建议仍然是不同的路线。而是使用 LinkButton
,这将是一种更 "traditional" 的方式(在 ASP.NET Web 表单中)来执行回发并传递数据:
因此,改为使用如下标记:
<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
}
}