这个绑定表达式怎么写?我这样写总是原样输出,不解析呢
也换了其他几种写法,也是不解析
我先解释下 我的目的是想在点击GridView的更新按钮时调用JS判断输入的值是否合法.
给CheckValue(string1,string2)传递两个参数值(当前行中两个单元格的值),本来想传入个行号,在JS中取值的,但是也是写不对语法.所以就写了两个方法在后台取值,这样写也是不能解析,直接当字符串输出了.
<asp:LinkButton ID="LinkButton2" runat="server" CausesValidation="True" CommandName="Update"
                            Text="更新" onclientclick='<%#"return CheckValue("+getAmount(Container.ItemIndex))+getDate(Container.ItemIndex)%>+")"'></asp:LinkButton>

解决方案 »

  1.   

    CheckValue()这个方法是JS中的啊 不需要return吗?
      

  2.   

    我刚试了下 跟return没关系啊 去掉之后还是不解析
    ,这是代码
    <a onclick="&lt;%#&quot;CheckValue(&quot;+getAmount(Container.ItemIndex))+getDate(Container.ItemIndex)%>+&quot;)&quot;;" id="GridView1_ctl02_LinkButton2" href="javascript:__doPostBack('GridView1$ctl02$LinkButton2','')">更新</a>
      

  3.   

    这样写
    onclientclick=<%# "return CheckValue('" + getAmount(Container.ItemIndex) + "','" + getDate(Container.ItemIndex)+ "')" %>>另外
    你必须是放在数据控件中才可以,如Repeater中
      

  4.   

    完整的例子
    <%@ Page Language="C#" EnableViewState="true" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
     "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <script runat="server">  void bind()
      {
        System.Data.DataTable dataTable1 = new System.Data.DataTable("BlogUser");
        System.Data.DataRow dr;    dataTable1.Columns.Add(new System.Data.DataColumn("Count1", typeof(System.Int32)));
        dataTable1.Columns.Add(new System.Data.DataColumn("Count2", typeof(System.String)));
        Random r = new Random();
        for (int i = 0; i < 8; i++)
        {
          dr = dataTable1.NewRow();
          dr[0] = r.Next(0, 100);
          dr[1] = "AAAAAAAAAAAAAAAAAAAAA";
          dataTable1.Rows.Add(dr);
        }    this.GridView1.DataSource = dataTable1;
        this.GridView1.DataBind();
      }
      protected void Page_Load(object sender, EventArgs e)
      {
        if (!Page.IsPostBack)
        {
          bind();
        }
      }  public String getAmount(int x)
      {
        return "测试内容" + x.ToString();
      }
      public String getDate(int x)
      {
        return "2011-11-" + x.ToString();
      }
    </script>
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head id="Head1" runat="server">
      <title></title>
      <script type="text/javascript">
        function CheckValue(a,b) {
          alert(a + "\r\n" + b);
          return false;
        }
      </script>
    </head>
    <body>  <form id="form1" runat="server">
      <asp:Repeater ID="GridView1" runat="server">  <ItemTemplate>  <asp:LinkButton ID="LinkButton2" runat="server" Text="更新"
      onclientclick=<%# "return CheckValue('" + getAmount(Container.ItemIndex) + "','" + getDate(Container.ItemIndex)+ "')" %>>
      </asp:LinkButton>
      </ItemTemplate>  </asp:Repeater>
      </form>
    </body>
    </html>
      

  5.   

    可以 放一个hidden控件, 传 this 参数,通过this参数的ID 取得hidden的值
                      
      

  6.   

    如果2个单元格里面的数据 是绑定数据库读取出来的那么你这个问题就好办了直接在后台 ItemDataBound 事件中 给 你的LinkButton 赋上 onclientclick 事件 就OK了后台获取当前行绑定事件的数据 方法例:Label lblID = e.Item.FindControl("数据1的ID") as Label; 
     lblID .Text这就是 你获取的数据内容
    LinkButton LinkButton2 = e.Item.FindControl("LinkButton2") as LinkButton;
    LinkButton2.Attributes.Add("onclientclick ", "return   CheckValue('数据1','数据2');");这样 就完事了数据1 数据2 你自己在绑定事件中获取 获取例子 上面有
      

  7.   

    孟老大,您这个表达式的语法是正确的,只是我用的是GridView,在Gridview中没有Container.ItemIndex这个写法啊.不知道在GridView中该怎么绑定呢?
      

  8.   

    "return    双引号 去掉
      

  9.   

    只有你的数据 是用 GridView 绑定的 不是纯table表格 就可以使用上面我说的方法
    例如下面 lblprojectname 是你要的 数据1你就在 ItemDataBound 绑定事件这么写 就OKLabel lblprojectname= e.Item.FindControl("lblprojectname") as Label; lblprojectname.text 
     就是当前绑定数据<asp:GridView ID="GridViewProject" runat="server" AutoGenerateColumns="False"  />
                                       <Columns>
                                            <asp:TemplateField SortExpression="projectname"><ItemTemplate><asp:Label ID="lblprojectname" runat="server" Text='<%# Bind("projectname") %>' ></asp:Label>
                                                </ItemTemplate>
                                            </asp:TemplateField></Columns>                                </asp:GridView>
      

  10.   

    GridView使用
    Container.DataItemIndex
      

  11.   

    通过 后台绑定方法我开始搞错了 你是判断输入内容吧那么就在 ItemDataBound 事件中写以下内容 这个对的//就是这样 LinkButton LinkButton2 = e.Item.FindControl("LinkButton2") as LinkButton;
    LinkButton2.Attributes.Add("onclientclick ", "return CheckValue("+getAmount(Container.ItemIndex))+getDate(Container.ItemIndex)");
      

  12.   

    完整答案ItemDataBound 事件中//获取行索引
    int I=e.Row.RowIndex;
    //获取对象
    LinkButton LinkButton2 = e.Item.FindControl("LinkButton2") as LinkButton;
    //添加 onclientclick  事件
    LinkButton2.Attributes.Add("onclientclick ", "return CheckValue('根据行索引获取单元格数据1,根据行索引获取单元格数据2')");测试过 完全可以 给分吧
      

  13.   

     protected void GridViewProject_RowDataBound(object sender, GridViewRowEventArgs e)
            {
                if (e.Row.RowType == DataControlRowType.DataRow)
                {
    //获取行索引
    int I=e.Row.RowIndex;
    //获取对象
    LinkButton LinkButton2 = e.Item.FindControl("LinkButton2") as LinkButton;
    //添加 onclientclick 事件
    LinkButton2.Attributes.Add("onclientclick ", "return CheckValue('根据行索引获取单元格数据1,根据行索引获取单元格数据2')");}
    }
     
    GridView 的行绑定事件 我刚写的是 ItemDataBound  写错了 好久没用了 就是这个代码了 
      

  14.   


    呵呵,谢谢Netzhouxiang兄的热情帮助!很难得见到你这么热心的朋友!
    你的思路是可行的,不过有点点小的问题:
    GridView中只有RowDataBound事件,另外我用的是模板列,编辑状态下的控件似乎在RowDataBound事件触发时还没有生成,在RowEditing事件处理方法中才可以访问到.
    您的思路是正确的!
      

  15.   

    问题解决了,综合了下孟老大和Netzhouxiang的方法,非常感谢你们!