2015-03-11 3 views
2

Я работаю с asp.net и C#Получить HREF значения с onServerClick

Я получил список ссылки и я хочу, чтобы получить 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 значение, я попытался якоря или регулярное выражение, но он не работает.

+0

Вы пытаетесь получить ссылки, которые будут перенаправлены на другую страницу в Code Behind? Если это то, что вы пытаетесь сделать, вы можете использовать Page.Response.Redirect(), Page.Response.RedirectPermanent() или Server.Transfer. Вам нужно будет добавить URL-адреса внутри скобки. – Auguste

ответ

4

Вы должны бросить отправителя к HtmlAnchor, так что вы можете получить доступ к свойству:

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

спасибо, что это работает! – usertfwr

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

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

Ваш onServerClick собирается переопределить href в любом случае, и вместо того, чтобы вызвать обратную передачу ... так что я d рекомендуем просто извлекать все это и просто:

<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 
    } 
} 

Этот способ кажется более простым и простым в использовании, на мой взгляд. Ответ Джейсона также будет работать для вас. Я думаю, что маршрут запутан, хотя, хотя вы можете прочитать href и получить это значение, вы не можете прочитать значение # из URL ... и это просто не стандартный способ выполнить то, что вы хотите выполнить. Кроме того, как вы планировали легко получить номер # из этого href?

Другая причина, по которой мне нравится этот маршрут, вы можете связать кого-то прямо в комнату, не сказав им щелкнуть что-то первым ... если id есть, он загрузит информацию о комнате или что-то еще, что вы делаете.

ОБНОВЛЕНИЕ: Если вы не хотите, чтобы информация о номере в URL-адресе и по-прежнему нужна «PostBack», моя рекомендация по-прежнему остается другим. Вместо того, чтобы использовать LinkButton, который был бы более «традиционным» способом (в веб-формы ASP.NET), чтобы сделать 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 
    } 
} 
+0

выглядит интересно, но ссылка теперь не имеет ничего общего с кодом C#? также, если я хочу получить идентификатор комнаты в page_load, как он вернет его? – usertfwr

+0

@usertfwr Я обновил ответ с помощью более «традиционного» способа выполнения того, что вы хотите сделать. Я думаю, что это будет иметь смысл для других программистов веб-форм. – MikeSmithDev

+0

@usertfwr мой первоначальный пост просто читает 'id' комнаты на' Page_Load' в функции 'RoomClick', потому что она находится в querystring (она получена из тега' a'). Он также безопасно отличает его как целое, потому что это похоже на соответствующий тип данных.«Обновленное» сообщение показывает, как это сделать с помощью PostBack, в то время как начальный ответ показал, как сделать это без обратной передачи, поскольку вы используете «URL», а не событие щелчка сервера. В зависимости от того, что вы пытаетесь сделать и как вы хотите, чтобы пользователь взаимодействовал со своей страницей. Я думаю, что в любом случае это более понятный метод, чем чтение 'href'. – MikeSmithDev

Смежные вопросы