Я добавил динамически ссылки на страницу asp. При щелчке я вызываю функцию. Я хочу узнать идентификатор ссылки, вызывающей функцию. Я добавил google.com и yahoo.com, чтобы объяснить свои потребности. Я хочу, чтобы функция извлекала данные из db в исходном сценарии, который я сделал.
<a href="#" onServerClick="abc_Click" id="4"/>click</a>
<a href="#" onServerClick="abc_Click" id="5"/>click here</a>
Код С#:
protected void abc_Click()
{
if(id is 4) // don't know how to know the id of the link that calls the function.
Response.Redirect("http://www.google.com");
else
Response.Redirect("http://www.yahoo.com");
}
Я ссылался на вызов функции С# в ASP.NET при нажатии на ссылку HTML.
Теперь у меня две проблемы.
Вам не хватает атрибута runat-server. Если вы включите это, вам необходимо иметь ссылку в форме. Но вы не можете передать идентификатор ссылки на сервер (если вы сначала не измените скрытое поле с помощью JS, а затем опубликуете скрытое поле). Однако это очень сложное решение довольно простой задачи.
Самый простой способ - просто добавить запрос, а затем выполнить вызов db в Page_Load.
Пример:
<a href="/mypage.aspx?id=4" />click</a>
<a href="/mypage.aspx?id=5" />click here</a>
И затем в коде:
public void Page_Load(object sender, EventArgs e)
{
if(Request.QueryString["id"] == "4")
{
Response.Redirect("http://www.google.com");
}
else
{
Response.Redirect("http://www.yahoo.com");
}
}
Вы пропустили важный атрибут для ссылки на эти ссылки на стороне сервера:
runat="server"
Это должно быть примерно так:
<a href="#" runat="server" onServerClick="abc_Click" id="4"/>click</a>
<a href="#" runat="server" onServerClick="abc_Click" id="5"/>click here</a>
Как вы добавляете их динамически, между прочим? Надеюсь, серверная сторона. Потому что, если они добавляются через JavaScript на клиенте, то слишком поздно для сервера связывать события с ними.
Он также рекомендовал, чтобы вы не делали эти ссылки, поскольку они на самом деле не связаны ни с чем. (" href="#"
просто говорит ему перейти в начало страницы.) Поскольку они якобы публикуют на сервере для принятия какого-либо действия на стороне сервера, они лучше работают как кнопки. (Что бы сделать то, что вы пытаетесь сделать намного проще, кстати.) Кнопки могут быть стилизованы, чтобы выглядеть как ссылки, если это необходимо для UX.
Для вашего обработчика на стороне сервера также требуются дополнительные аргументы:
protected void abc_Click(object sender, EventArgs e)
В этом случае sender
будет элемент, который был нажат. Вы можете передать его этому типу элемента и получить всю необходимую информацию от него, включая его свойство .Id
.
runat="server"
виден в runat="server"
на стороне клиента, значит, вы как-то неправильно добавляете эти ссылки. Как вы их динамически добавляете?
добавьте runat = "server" к вашей разметке html, чтобы этот элемент был доступен на вашем сервере. В противном случае это просто элемент html, и на сервере, к которому, очевидно, невозможно получить доступ...
<a href="#" runat="server" onServerClick="abc_Click" id="4" />
Вам также нужно будет правильно реализовать обработчик событий, потому что в вашей реализации отсутствуют параметры