none
datalist ItemTemplate 数据参数传递 RRS feed

  • 问题

  • 我用datalist  绑定   所有回复帖子的信息    里面有个BUTTON 按钮 ,激发一个标记为答案的事件,就想本论坛的标记为答案:

     <ItemTemplate>
                                <table border="0" cellpadding="0" cellspacing="0" class="TableCss" style="width: 794px">
                                    <tr>
                                        <td style="width: 160px; height: 148px; text-align: center; background-image: url(../Images/帖子及回帖信息页/1.gif);" rowspan="2">
                                            回帖人信息<br /> 
                                            <asp:Image ID="Image1" runat="server" />  <br />                               
                                        <%# DataBinder.Eval(Container.DataItem,"nc") %>
                                            <br />
                                            <br />
                                            <asp:Label ID="Label2" runat="server"><%# DataBinder.Eval(Container.DataItem,"bt") %></asp:Label>                                        
                                            <br />
                                            您的积分是 <%#Eval("imaginaryFraction") %>分
                                            <asp:Label ID="JF" runat="server" Text=""></asp:Label>                                        
                                            </td>
    
    <asp:Button ID="Button1" runat="server" EnableTheming="True" ForeColor="#00066C" CommandName="biaoji" CommandArgument='<%#Eval("bh") %>'                   
                                                Text="标记为答案" Width="91px" />                                            
                                                  <asp:Label runat="server"  ID="wu" Text='<%#Eval("zz") %>' Visible="false"></asp:Label>
                                                 <asp:Button ID="Button2" runat="server" Text="Button"  CommandArgument='<%#Eval("zz") %>' CommandName="Sname"  Visible="false"/>                                            
                                                </td>         
                                    </tr>
                                    
                                </table>


     就是不知道  "标记为答案这个功能怎么实现"     在datalist 里面 能实现吗,参数怎么传递呀》郁闷中啊》求解,有例子更好啊     ,还有就是标记为答案以后,下次加载的时间    显示 Button1.text=  已标为答案:   不知道怎么做
     


    小吴
    2009年4月22日 7:57

答案

  • 拷贝可运行的例子
    <%@ Page Language="C#" EnableEventValidation="false"%>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
      System.Data.DataView CreateDataSourceByXianhuiMeng()
      {
        System.Data.DataTable dt = new System.Data.DataTable();
        System.Data.DataRow dr;
        dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal)));
    
        for (int i = 0; i < 30; i++)
        {
          System.Random rd = new System.Random(Environment.TickCount * i); ;
          dr = dt.NewRow();
          dr[0] = "班级" + i.ToString();
          dr[1] = "【孟子E章】" + i.ToString();
          dr[2] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[3] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[4] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[5] = System.Math.Round(rd.NextDouble() * 100, 2);
          dt.Rows.Add(dr);
        }
        System.Data.DataView dv = new System.Data.DataView(dt);
        return dv;
      }
    
      protected void Page_Load(object sender, EventArgs e)
      {
        DataList1.DataSource = this.CreateDataSourceByXianhuiMeng();
        DataList1.DataBind();
      }
    
    
      protected void Button1_Command(object sender, CommandEventArgs e)
      {
        if (e.CommandName == "biaoji")
        {
          Response.Write("<h2>你点的是:" + e.CommandArgument + "</h2>");
        }
      }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:DataList ID="DataList1" runat="server">
        <ItemTemplate>
          <table border="0" cellpadding="0" cellspacing="0" class="TableCss" style="width: 794px;border:1px solid red">
            <tr>
              <td style="width: 160px; height: 148px; text-align: center; background-image: url(http://dotnet.aspx.cc/Images/logoSite.gif);"
                rowspan="2">
                回帖人信息<br />
    
                <br />
                <%# Eval("学生姓名")%>
                <br />
                <br />
                <asp:Label ID="Label2" runat="server"><%# DataBinder.Eval(Container.DataItem, "学生班级")%></asp:Label>
                <br />
                您的积分是
                <%#Eval("语文")%>分
                <asp:Label ID="JF" runat="server" Text=""></asp:Label>
              </td>
              <td>
                <asp:Button ID="Button1" runat="server" EnableTheming="True" OnCommand="Button1_Command"
                  ForeColor="#00066C" CommandName="biaoji" CommandArgument='<%#Eval("学生姓名") %>' Text="标记为答案"
                  Width="91px" />
              </td>
            </tr>
          </table>
        </ItemTemplate>
      </asp:DataList>
      </form>
    </body>
    </html>
    

    孟宪会
    2009年4月22日 9:46
    版主
  • 看我的例子

    <%@ Page EnableEventValidation="false" %>


    孟宪会
    2009年4月23日 1:09
    版主

全部回复

  • 或者给个更好的方法也好啊:谢谢啦:
    小吴
    2009年4月22日 8:02
  • CommandArgument
     就可以啊。,你看看msdn上关于这个属性的用法
    

    孟宪会
    2009年4月22日 9:03
    版主
  • 用的就是  CommandArgument 呀,    就是实现不了呀,顺便看下我的代码吧!孟老师。。。。
    小吴
    2009年4月22日 9:18
  • 拷贝可运行的例子
    <%@ Page Language="C#" EnableEventValidation="false"%>
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    
    <script runat="server">
    
      System.Data.DataView CreateDataSourceByXianhuiMeng()
      {
        System.Data.DataTable dt = new System.Data.DataTable();
        System.Data.DataRow dr;
        dt.Columns.Add(new System.Data.DataColumn("学生班级", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("学生姓名", typeof(System.String)));
        dt.Columns.Add(new System.Data.DataColumn("语文", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("数学", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("英语", typeof(System.Decimal)));
        dt.Columns.Add(new System.Data.DataColumn("计算机", typeof(System.Decimal)));
    
        for (int i = 0; i < 30; i++)
        {
          System.Random rd = new System.Random(Environment.TickCount * i); ;
          dr = dt.NewRow();
          dr[0] = "班级" + i.ToString();
          dr[1] = "【孟子E章】" + i.ToString();
          dr[2] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[3] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[4] = System.Math.Round(rd.NextDouble() * 100, 2);
          dr[5] = System.Math.Round(rd.NextDouble() * 100, 2);
          dt.Rows.Add(dr);
        }
        System.Data.DataView dv = new System.Data.DataView(dt);
        return dv;
      }
    
      protected void Page_Load(object sender, EventArgs e)
      {
        DataList1.DataSource = this.CreateDataSourceByXianhuiMeng();
        DataList1.DataBind();
      }
    
    
      protected void Button1_Command(object sender, CommandEventArgs e)
      {
        if (e.CommandName == "biaoji")
        {
          Response.Write("<h2>你点的是:" + e.CommandArgument + "</h2>");
        }
      }
    </script>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
      <title></title>
    </head>
    <body>
      <form id="form1" runat="server">
      <asp:DataList ID="DataList1" runat="server">
        <ItemTemplate>
          <table border="0" cellpadding="0" cellspacing="0" class="TableCss" style="width: 794px;border:1px solid red">
            <tr>
              <td style="width: 160px; height: 148px; text-align: center; background-image: url(http://dotnet.aspx.cc/Images/logoSite.gif);"
                rowspan="2">
                回帖人信息<br />
    
                <br />
                <%# Eval("学生姓名")%>
                <br />
                <br />
                <asp:Label ID="Label2" runat="server"><%# DataBinder.Eval(Container.DataItem, "学生班级")%></asp:Label>
                <br />
                您的积分是
                <%#Eval("语文")%>分
                <asp:Label ID="JF" runat="server" Text=""></asp:Label>
              </td>
              <td>
                <asp:Button ID="Button1" runat="server" EnableTheming="True" OnCommand="Button1_Command"
                  ForeColor="#00066C" CommandName="biaoji" CommandArgument='<%#Eval("学生姓名") %>' Text="标记为答案"
                  Width="91px" />
              </td>
            </tr>
          </table>
        </ItemTemplate>
      </asp:DataList>
      </form>
    </body>
    </html>
    

    孟宪会
    2009年4月22日 9:46
    版主
  • 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。

    异常详细信息: System.ArgumentException: 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。

    源错误:

    执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。

    堆栈跟踪:

    [ArgumentException: 回发或回调参数无效。在配置中使用 <pages enableEventValidation="true"/> 或在页面中使用 <%@ Page EnableEventValidation="true" %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。如果数据有效并且是预期的,则使用 ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证。]
       System.Web.UI.ClientScriptManager.ValidateEvent(String uniqueId, String argument) +409
       System.Web.UI.Control.ValidateEvent(String uniqueID, String eventArgument) +108
       System.Web.UI.WebControls.Button.RaisePostBackEvent(String eventArgument) +33
       System.Web.UI.WebControls.Button.System.Web.UI.IPostBackEventHandler.RaisePostBackEvent(String eventArgument) +7
       System.Web.UI.Page.RaisePostBackEvent(IPostBackEventHandler sourceControl, String eventArgument) +11
       System.Web.UI.Page.RaisePostBackEvent(NameValueCollection postData) +33
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +4919
    
     
    运行上面例子的时候出现这问题,怎么解决呀:

    版本信息: Microsoft .NET Framework 版本:2.0.50727.42; ASP.NET 版本:2.0.50727.42

    小吴
    2009年4月23日 0:51
  • 看我的例子

    <%@ Page EnableEventValidation="false" %>


    孟宪会
    2009年4月23日 1:09
    版主