【问题标题】:Calling code-behind with Javascript clarification使用 Javascript 说明调用代码隐藏
【发布时间】:2012-04-17 05:52:30
【问题描述】:

我正在尝试使 gridview 中的一行可点击,以便它导致回发,以便我可以执行代码隐藏。

我的 GridView 的 RowDataBound 事件处理程序中有这个。这个作品:

if (e.Row.RowType == DataControlRowType.DataRow)
{
     e.Row.Attributes["onmouseover"] = "this.style.cursor='pointer';this.style.textDecoration='underline';";
     e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';";
     e.Row.Attributes["onclick"] = "javascript:__doPostBack('PostBackFromItemWindow', '');";
}

但这不起作用:

if (e.Row.RowType == DataControlRowType.DataRow)
{
     e.Row.Attributes["onmouseover"] = "this.style.cursor='pointer';this.style.textDecoration='underline';";
     e.Row.Attributes["onmouseout"] = "this.style.textDecoration='none';";
     e.Row.Attributes["onclick"] = "<script type='text/javascript'>__doPostBack('PostBackFromItemWindow', '');</script>";
}

问题:

  1. 为什么第一个有效,而第二个无效?
  2. 在尝试完成此任务(从 javascript 调用代码隐藏)时,是否有其他方法可以做到这一点?我做了一些阅读并遇到了 WebMethods(),但最终不喜欢它们需要静态才能工作的事实。上面实际上给了我我需要的功能,我只是想确保它是一种可接受的方式(即它没有被弃用或其他东西),并且由于一些不可预见的错误,我不会不可避免地给自己带来麻烦此时。

【问题讨论】:

    标签: c# javascript gridview onclick postback


    【解决方案1】:

    这可以帮助你:

    1. 第一个有效,因为您已指定 onClick 处理程序与 javascript 中的 __doPostBack 函数相关联。 'javascript:' 只是指定该函数是用 javascript 编写的,并且仅当脚本与元标记中指定的脚本不同时才应使用它。

      第二个不起作用,因为您已经为 javascript 处理程序指定了 html 脚本。当这进入 javascript 解释器时,它无法理解标签,因此无法工作。

    2. __doPostBack 不建议用于here 提到的所有情况。但是,如果您没有其他选择来创建回发,那么您可以使用它。这个link 可以为您提供更多信息。

    【讨论】:

      猜你喜欢
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多