使用 Javascript 澄清调用代码隐藏

Calling code-behind with Javascript clarification

本文关键字:代码 隐藏 调用 Javascript 使用      更新时间:2023-09-26

我正在尝试使网格视图中的行可单击,以便它会导致回发,以便我可以执行代码隐藏。

我在 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(),但最终不喜欢它们需要静态才能工作的事实。 以上实际上为我提供了我需要的功能,我只是想确保这是一种可以接受的方式(即它没有被弃用或其他东西),并且由于一些不可预见的错误,我以后不会不可避免地给自己带来麻烦在这一点上。

这可以帮助您:

  1. 第一个工作是因为,您已经指定了 onClick 处理程序与 javascript 中的__doPostBack函数相关联。'javascript:"只是指定函数是用javascript编写的,只有当脚本与元标记中指定的脚本不同时,才应使用此功能。

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

  2. 对于此处提到的所有情况,不建议使用__doPostBack。但是,如果您没有其他选择来创建回发,则可以使用它。此链接将能够为您提供更多信息。