Jam*_*ell 2 javascript c# asp.net dotnetnuke
我有一个LinkButton控件,我需要添加ac#方法.目前,当我使用解析控件并将控件添加到页面时,它会更改对javascript的调用,并且我得到了未定义.我想办法解决这个问题,就是定义一个javascript函数,从后面的代码中调用c#方法,但我无法弄清楚如何做到这一点.
特别是当点击链接按钮时,我需要javascript将链接按钮的ID传递给C#方法.
我试过这个:
foreach (Control Control in myctrl.Controls)
{
if (Control is LinkButton)
{
LinkButton lb = (LinkButton)Control;
lb.Click += LinkButton_Click;
}
Panel1.Controls.Add(myctrl);
}
public void LinkButton_Click(Object sender, EventArgs e)
{
BREAKPOINTHERE> Console.Write(e.ToString());
}
Run Code Online (Sandbox Code Playgroud)
点击时它永远不会触发.这是生成的代码:
<a id="dnn_ctr954_ViewPromotions_LinkButton2" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("dnn$ctr954$ViewPromotions$LinkButton2", "", true, "", "", false, true))">Get your Free 2</a>
Run Code Online (Sandbox Code Playgroud)
现在,如果我把它放在我的aspx页面,它工作正常:
<asp:LinkButton ID="test" OnClick="LinkButton_Click" runat="server">mybutton</asp:LinkButton>
Run Code Online (Sandbox Code Playgroud)
我明白了,它运行正常:
<a id="dnn_ctr954_ViewPromotions_test" href="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("dnn$ctr954$ViewPromotions$test", "", true, "", "", false, true))">mybutton</a>
Run Code Online (Sandbox Code Playgroud)
你不能这样做.Javascript存在于客户端上.服务器上存在C#代码.他们不可能彼此有任何背景知识.服务器代码运行以响应HTTP请求.
话虽这么说,您可以在C#中创建一个Web服务方法,并使用javascript调用它.从你的问题的背景来看,它可能不会做你想要的.Web服务方法是静态的,并且与常规回发没有相同的上下文.
但是,您可以查看一些类似这样的文章: 使用Ajax扩展的客户端Web服务调用
编辑: 通过编辑,听起来你只想让你的按钮回发到服务器.这是ASP.Net的核心功能,很容易做到.正如其他答案所示,您只需要在服务器代码中连接一个click事件处理程序.