javascript - 从 ASP.NET Webforms 中的页面级别调用 UserControl 内部的客户端函数

标签 javascript c# asp.net webforms user-controls

我有一个位于 ASP.NET 页面内的 ASP.NET UserControl。

ASP.NET UserControl 具有以下正确工作的逻辑:

用户控件中的按钮:

<asp:LinkButton runat="server" ID="lbCalculate" Text="Calculate" OnClientClick="SaveGridData(); return false;"></asp:LinkButton>

这是调用的客户端函数:(也在 UserControl 中)

function SaveGridData(sender, args) {
    var grid = $find('<%=grid1.ClientID%>');
        grid.get_batchEditingManager().saveChanges(grid.get_masterTableView());
    }

客户端函数最终进入服务器上名为 grid1_BatchEditCommand 的网格事件,该事件将所有数据保存在网格中(也在 UserControl 中)。


当单击位于 UserControl 中的计算按钮时,上述操作非常有效。但是,当单击 UserControl 所在的页面上的按钮时,我还需要运行完全相同的逻辑。

我首先尝试在名为 SaveGrid() 的用户控件中公开一个公共(public)函数,该函数具有一个调用 SaveGridData() 的 RegisterStartUpScript。然后在 btnFromParentPage_OnClick 事件上调用 SaveGrid()。运气不好。

public void SaveGrid()
{
    ScriptManager.RegisterStartupScript(Page, Page.GetType(), "test", "SaveGridData();", true);
}

在父页面代码后面:

protected void btnFromParentPage_Click(object sender, EventArgs e)
{
    userControl1.SaveGrid();
}

作为最后的手段,我还尝试了以下方法:
<asp:Button ID="btnOnParentPage" runat="server" SkinID="Success" Text="Save & Close" OnClick="btnOnParentPage_Click" OnClientClick="SaveGridData(); return false;" />

JavaScript 函数被调用并且它可以工作,但是现在我无法访问此按钮的 OnClick 服务器端事件,因为返回错误行并且没有返回错误行,JavaScript 函数不会被调用。 .. 还有很多逻辑需要运行。

最佳答案

您可以简单地向上或向下导航控件树以找到控件并获取它的 ClientID

var grid = $find('<%= userControl1.FindControl("grid1").ClientID %>');

为此,必须在 aspx 页面上定义用户控件,而不是从代码后面动态添加用户控件。如果它是从后面的代码添加的,那么您还必须以编程方式获取 ClientID 并将其作为字符串放在页面上。

关于javascript - 从 ASP.NET Webforms 中的页面级别调用 UserControl 内部的客户端函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43900940/

相关文章:

javascript - 禁用时无法调整文本区域的大小

javascript - 动态和异步加载多个 LinkedIn 共享按钮

javascript - 如何防止在文本字段中输入非数字?

javascript - 如何在图标单击上打开 bootstrap-datepicker 而不仅仅是在输入单击上

c# - 为什么单例不能直接实现 IObjectReference?

c# - 找出Windows服务的运行进程名称.NET 1.1

母版页 head 标签中的 Javascript

Firefox 中的 Javascript 问题,但 IE 中没有 调试问题 VIsual Studio 2010

c# - 当接口(interface)中有重载方法时,为什么我的代码会调用错误的方法

asp.net - 从代码隐藏更改部分 CSS3 线性渐变