【问题标题】:Calling a Javascript function from .cs从 .cs 调用 Javascript 函数
【发布时间】:2014-05-19 15:21:47
【问题描述】:

我有一个更新面板,其中添加了一个按钮和一个网格,如下所示:this._UpdatePanel.ContentTemplateContainer.Controls.Add(this._BtnSave); this._UpdatePanel.ContentTemplateContainer.Controls.Add(this._AssignGrid);

单击此按钮时,我正在调用驻留在不同类 AssignedGrid.cs 中的函数。 this._AssignedGrid.getSelectedRows();

AssignedGrid.cs 反过来调用一个 javascript 函数,如下所示:

  public void getSelectedRows()
  {
      this.Page.ClientScript.RegisterStartupScript(Page.GetType(), "GetSelectedItems", "<script type='text/javascript' language='javascript'>GetSelectedItems();</script>");    
  }

但是这个 javascript 函数永远不会被调用!如果我以正确的方式调用该函数,请告诉我。

【问题讨论】:

  • 我什至尝试了如下警告,但没有奏效:this.Page.ClientScript.RegisterStartupScript(Page.GetType(), "GetSelectedItems", "alert('ok');");
  • 页面是否使用UpdatePanel?
  • @ Yuriy Galanter 是的,它有一个更新面板。
  • 那么请看下面的答案。而不是ClientScript,您需要使用ScriptManager 来调用RegisterStartupScript

标签: c# javascript .net


【解决方案1】:

这应该可行,

ScriptManager.RegisterStartupScrip(this.Page, this.Page.GetType(), "GetSelectedItems", "GetSelectedItems();", true);

脚本管理器的第一个参数需要一个页面对象 (http://msdn.microsoft.com/en-us/library/bb310408(v=vs.110).aspx)

这可能是用户控件、Web 控件等,而不是实际的页面对象,因此它不起作用。唯一有效的情况是您在页面的上下文中,例如就像一个从页面继承的类。

所以只需明确地发送页面对象。

完成后,如果它没有被调用,请使用 Chrome 之类的浏览器,打开开发人员工具 (f12) 并转到控制台窗口并查找 javascript 错误。如果它被调用但未找到,您应该看到“GetSelectedItems 不存在”或类似错误。这意味着您的函数在调用它的代码被 ScriptManager 以 dom 顺序插入之后被声明和加载。

ScriptManager 将在页面末尾的关闭标记之前插入代码调用,因此请在标记中或其上方的某个位置定义 GetSelectedItems。

【讨论】:

    【解决方案2】:

    你不必给脚本标签

    ScriptManager.RegisterStartupScript(this, GetType(), "GetSelectedItems", "GetSelectedItems();", true);
    

    【讨论】:

    • @chandresh patel..感谢您的回复..但是没有用!
    • 试试这个这是唯一的方法 ScriptManager.RegisterClientScript(this, GetType(),"GetSelectedItems", "GetSelectedItems();", true);
    猜你喜欢
    • 2011-10-10
    • 1970-01-01
    • 2014-04-05
    • 2018-05-24
    • 1970-01-01
    • 1970-01-01
    • 2011-07-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多