【问题标题】:How to I call a javascript function on onrowcommand?如何在 onrowcommand 上调用 javascript 函数?
【发布时间】:2009-09-25 16:02:51
【问题描述】:

使用 asp.net,c# 3.5,vs 2008。

我有一个名为 gv1 的 aspx gridview,它带有一个有效的 c# 代码隐藏 onrowcommand 方法,当单击该行上的按钮时调用该方法。

gridview上的按钮是动态生成的。

我正在尝试用 javascript 函数替换该代码隐藏调用,以避免往返服务器。

我该怎么做?

到目前为止我已经尝试过

  1. 当我在 foreach 循环中动态生成按钮时,在后面的代码中添加一个行属性,这不起作用:

    r.Attributes.Add("OnRowCommand", "javascript:gv1RowCommand(ID);");

  2. 以下在运行前会报错:没有重载的方法需要 1 个参数

    <asp:GridView ID="gv1" runat="server" onrowcommand="gv1RowCommand(ID)" ...
    
  3. 各种其他的东西,比如事件onchange , onselected

我使用以下 javascript 只是为了看看是否可以调用它:

function gv1RowCommand(ID) { 
alert(
"row command"); 
}

【问题讨论】:

  • 我建议在加载 DOM 后注入 javascript,这样,如果脚本被禁用,您仍然可以使用回发来处理偶数服务器端。
  • 我可以使用 protected void gv1_RowCommand(object sender, GridViewCommandEventArgs e) { GridViewRow row = (GridViewRow)(((Button)e.CommandSource).NamingContainer) 处理事件服务器端;等等...我试图避免回发。
  • 您不了解页面生命周期。 RowCommand 不是客户端事件。
  • 感谢您为我解决这个问题。所以这就是我的问题。我正在寻找与 RowCommand 等效的客户端,例如 ondblclick。这是否可行:在 gridview 中动态生成一个 html 按钮而不是一个 aspnet 按钮,并在 onClick 事件中使用 parentElement.parentElement 来获取行?

标签: c# asp.net javascript gridview rowcommand


【解决方案1】:

您需要先创建按钮的对象,然后为其添加属性。 检查下面的代码 -

foreach (GridViewRow row in gv1.Rows)
 {
    //Creates object of button inside your gridView Row
    Button btnRowCommand = (Button)row.FindControl("YourButtonName");
    //Adds Attribute to button- in this case adds onclick attribute 
    //which will fire the 
    //gv1RowCommand(ID); javascript function
    btnRowCommand.Attributes.Add("onclick", "gv1RowCommand('"+ ID +"');"); 
 }

代替

// dont use this code  
 r.Attributes.Add("OnRowCommand", "javascript:gv1RowCommand(ID);");  
// dont use this code

这将导致您的 javascript 函数 gv1RowCommand(ID) 在用户单击 gridview 内的按钮时触发。如果您需要更多关于在 gridView 中使用 javascript 的信息,您可以邮寄或回复。如果上面的代码 sn-p 对您来说还不够,您可以发布更多代码清单,并相应地发布正确的代码。

【讨论】:

  • 另外,您可以以相同的方式将点击事件添加到行本身。这样,用户只需单击该行即可触发事件(如果这是所需的功能)。
【解决方案2】:

你可以摆弄的Javascript事件:

Javascript Events

您无权访问 Javascript 中的任何页面方法或属性。除非您使用 Ajax,否则您无法访问任何持久性内容...因此,您在 RowCommand 中做的事情并不多,您可以有效地移植到客户端 javascript 层。

【讨论】:

    猜你喜欢
    • 2021-12-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多