2013-01-30 3 views
1

У меня есть много LinkButton, таких как:Как отправить значение с LinkButton на сервер?

<asp:LinkButton runat="server" onclick="cmdCancellaComunicazione_Click">X</asp:LinkButton> 

они называют один и тот же метод сервера, cmdCancellaComunicazione_Click. но мне нужно их отличить (переходя к серверу, например, значение).

Как я могу это сделать? Я знаю, что есть CommandArgument, но я не могу установить для него значение, такое как <% = myValue%>

+2

установить командный указатель с привязкой к данным, например. '<% # myvalue%>'. Конечно, вам нужно вызвать BindData, чтобы привязать его. Но дело в том, что вы не можете использовать '<%= %>' для значения управления сервером. –

+0

Вы пробовали Google? http://stackoverflow.com/questions/3551353/how-to-verify-which-linkbutton-is-clicked-in-asp-net-on-a-page-load – mybrave

+0

@mybrave: мой вопрос другой! – markzzz

ответ

1

Ваш код не имеет ID указано на вашем LinkButton, который не кажется странным.

Вы должны быть в состоянии назначить на стороне сервера CommandArgument с:

yourLinkButton.CommandArgument = yourValue; 

И тогда он будет считан сторону его сервера в вашем OnClick обработчика.

protected void cmdCancellaComunicazione_Click(object sender, EventArgs e) 
{ 
    LinkButton btn = (LinkButton)sender; 
    if (btn.CommandArgument.Equals(something here)) 
    { 
      // do something 
    } 
    else 
    { 
      // do something else 
    } 
} 

Есть ли это в сетке или что-то, что связано? Если это так, я бы осуществить OnDataBinding событие для LinkButton как:

<asp:LinkButton ID="yourLinkButton" 
    runat="server" OnDataBinding="yourLinkButton_DataBinding" 
    onclick="cmdCancellaComunicazione_Click">X</asp:LinkButton> 

кода на стороне сервера (я стараюсь избегать встроенного кода всякий раз, когда это возможно):

protected void protected void lblID_DataBinding(object sender, System.EventArgs e) 
{ 
    LinkButton btn = (LinkButton)sender; 
    btn.CommandArgument = yourValue; 
} 

Есть ли что-то еще к вашему сценарию, что вам не включили в свой вопрос?

+0

Это отличное решение! Но как я могу передать значение, вызванное OnDataBinding? Я имею в виду, если у меня есть кнопка ссылки внутри foreach, я бы хотел поставить ей прогрессивное число, например 'btn.CommandArgument =" value "+ counter;' – markzzz

+0

В любом случае, где хранится значение CommandArgument? Я думаю, только на стороне сервера. Это хорошо, поэтому пользователь не может видеть, какое значение имеет это, например! – markzzz

+0

@markzzz Довольно легко сделать счетчик в 'OnDataBinding', просто добавьте глобальную переменную в свой класс страницы и затем увеличивайте ее каждый раз, когда запускается событие OnDataBinding. «CommandArguement» будет храниться в «ViewState». – Kelsey

2

Вы можете использовать аргумент отправителя обработчика событий. Брось его в LinkButton:

protected void cmdCancellaComunicazione_Click(Object sender, EventArgs e) 
{ 
    LinkButton lbtn = (LinkButton) sender; 
} 

Затем вы можете использовать это CommandName, ID или Text различать.

+0

У меня такая же проблема: не могу установить идентификатор с использованием настраиваемых переменных <%= %>: Я внутри каждого для каждого ... – markzzz

+0

@markzzz: Где вы используете 'foreach' на разметке aspx? Почему бы вам не использовать элемент управления webdataound, например GridView или Repeater и codebehind? –

0

В вашем методе вы можете наложить sender на номер LinkButton и проверить его там.

0

OnCommand будет хорошим вариантом здесь.

protected void ButtonCommand(object sender, CommandEventArgs e) 
{ 
    string theCommand = e.CommandArgument.ToString(); 
} 

Просто добавьте OnCommand и CommandArgument к LinkButton.

<asp:LinkButton id="LinkButton1" Text="The Text" OnCommand="ButtonCommand" CommandArgument="YourInfo" runat="server"></asp:LinkButton> 
+0

То же самое. Невозможно использовать <%= %> – markzzz

+0

Пожалуйста, покажите, как вы строите свой ретранслятор/цикл, и как вы его связываете. – MikeSmithDev

+0

i.e, если это был ретранслятор, вы могли бы использовать 'CommandArgument = '<% # Eval (« TheField »)%>'' – MikeSmithDev

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