【问题标题】:After calling a jquery function, server side function doesn't trigger调用jquery函数后,服务器端函数不触发
【发布时间】:2015-05-29 03:40:18
【问题描述】:

我有一个包含三个列或字段的数据列表:

Column1:一些数据

Column2:链接按钮更新

Column3: div "divCheck",默认隐藏。

<asp:DataList ID="MyDataList" runat="server" EnableViewState="True">
      <HeaderTemplate>
      </HeaderTemplate>
      <ItemTemplate>
          <table width="100%">
              <tr id="ItemRow" runat="server">
                  <td >
                      <%# DataBinder.Eval(Container.DataItem, "some_data")%>
                  </td>
                  <td >
                      <asp:LinkButton Text="Update" class="lnk_showCheck" CommandName="update" Runat="server" ID="update"   />
                  </td>
                  <td >
                      <div id="check" style="display: none">Check</div>

                  </td>
              </tr>
          </table>
      </ItemTemplate>

</asp:DataList>

当链接按钮被点击时,它会调用一个jquery函数来显示一个div。

<head>
    <script type="text/javascript">
        jQuery(function ($) {
            $('a.lnk_showCheck').click(function (e) {
                e.preventDefault();
                $('div',$(this).closest("td").next()).show();
            });
        });
    </script>
</head>

但是,jquery调用后,并没有触发这个服务端函数:

Protected Sub MyDataList_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles MyDataList.ItemCommand

        If e.CommandName = "update" Then
            ' Put some code here
            ' It doesn't trigger after LinkButton calls jquery function.

        End If

    End Sub

为什么?我应该如何调用这个服务器端函数?

编辑:

我正在尝试从服务器端调用 jquery 函数 ShowCheck,但我不知道如何使它像 ('a.lnk_showCheck').click(function

 <script type="text/javascript">
        jQuery(function ($) {

            $('a.lnk_showCheck').click(function (e) {
                //e.preventDefault();
                $('div', $(this).closest("td").next()).show();            

            });

        });
    </script>

    <script type="text/javascript">

            function ShowCheck() {
                $('div', $(this).closest("td").next()).show();
            };

    </script>

服务器端函数调用jquery函数:

Protected Sub MyDataList_ItemCommand(ByVal source As Object, ByVal e As System.Web.UI.WebControls.DataListCommandEventArgs) Handles MyDataList.ItemCommand

        If e.CommandName = "update" Then

            Page.ClientScript.RegisterStartupScript(Me.[GetType](), "show", " ShowCheck();", True)
        End If

    End Sub

调用 ShowCheck jquery 函数时出错。
错误:无法获取属性“toLowerCase”,因为它未定义。

【问题讨论】:

  • e.preventDefault(); 将停止默认操作的发生......在这种情况下,回发以运行您的事件处理程序。
  • 是的,但是如果我不输入codee.preventDefault();code,那么它会回发并且不会显示div。
  • 为了到达服务器,你必须回发。它是事件处理程序运行的唯一方式。可能您的答案是您需要测试回发并处理您的 div 服务器端。
  • 我正在尝试其他角度:在服务器端函数完成后调用 jquery 函数。但是,我不知道如何正确构造jquery函数。
  • 此外,您可以加载要调用 in 事件处理程序的 javascript,并在页面回发后运行它。使用类似RegisterStartupScript

标签: jquery asp.net


【解决方案1】:

您的 RegisterStartupScript 参数已关闭。您需要将脚本指定为 Javascript。

这是我用来加载、调用然后卸载 javascript 函数的一些代码。

var script = string.Format(@"<script language='javascript'>
                                function f(){
                                              {
                                                 {0}(); 
                                                 Sys.Application.remove_load(f);
                                             }}; 
                                 Sys.Application.add_load(f);
                            </script>", function);

Page.ClientScript.RegisterStartupScript(GetType(), function, script, false);

在您的情况下,您可以将变量 function 替换为 "ShowCheck"(没有括号,因为它们已经在字符串中。)

我还应该注意,这是在 C# 而不是 VB 中。不过应该很容易翻译。

如果混乱太混乱而你只想调用你的方法试试:

var script = @"<script language='javascript'> ShowCheck();</script>";

Page.ClientScript.RegisterStartupScript(GetType(), "ShowCheck", script, false);

【讨论】:

  • 感谢您的帖子,但我认为这是另一回事。当我运行代码时,错误仍然存​​在。我不确定我的 jquery 函数 ShowCheck 是否正确编写并且行为类似于$('a.lnk_showCheck').click(function (e) {
  • @CarlosHeredia,好吧..现在你失去了我。我在您的 new 编辑中看到您的错误是toLowerCase is undefined。但是您在帖子中的任何位置都没有致电toLowerCase。所以你显然没有提供足够的信息,非常令人沮丧。
  • 我检查了$(this).closest("td") 给了我错误toLowerCase is undefined。但是,在$('a.lnk_showCheck').click(function (e) { 中没有错误。这就是为什么我认为函数ShowCheck 有问题。感谢您的帮助。
  • @CarlosHeredia 你找到答案了吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-14
  • 1970-01-01
  • 2023-04-09
  • 2012-07-16
相关资源
最近更新 更多