0

私のコードは、ラジオボタンとivを備えたデータリストを取得し、それを単一の選択可能なonitemdataboundにしました....今、選択したラジオボタンに基づいて隠しフィールドを評価しようとしています

私のコードは次のようになります

aspx コード

<asp:DataList ID="DataList1" runat="server" RepeatColumns = "4"  CssClass="datalist1" 
                RepeatLayout = "Table"  OnItemDataBound="SOMENAMEItemBound"
                CellSpacing="20" onselectedindexchanged="DataList1_SelectedIndexChanged">
                <ItemTemplate>
                <br />
                <table cellpadding = "5px" cellspacing = "0" class="dlTable">
                <tr>
                <td align="center">
                <a href="<%#Eval("FilePath")%>" target="_blank"><asp:Image ID="Image1" runat="server" CssClass="imu" ImageUrl = '<%# Eval("FilePath")%>' 
                Width = "100px" Height = "100px" style ="cursor:pointer" />
                </td>            
                </tr>
                <tr >
                <td align="center">                    
                <asp:RadioButton ID="rdb" runat="server"  OnCheckedChanged="rdb_click" AutoPostBack="True" />            
                <asp:HiddenField ID="HiddenField1" runat="server" Value = '<%#Eval("ID")%>' /> 
                </td>
                </tr>                     
                </table>

 </ItemTemplate> 
</asp:DataList>

コードビハインド

 protected void SOMENAMEItemBound(object sender, DataListItemEventArgs e)
        {
            RadioButton rdb;
            rdb = (RadioButton)e.Item.FindControl("rdb");
            if (rdb != null)
                rdb.Attributes.Add("onclick", "CheckOnes(this);");



        }

  protected void rdb_click(object sender, EventArgs e)
        {
            for (int i = 0; i < DataList1.Items.Count; i++)
            {
                RadioButton rdb;
                rdb = (RadioButton)DataList1.Items[i].FindControl("rdb");
                if (rdb != null)
                {
                    if (rdb.Checked)
                    {
                        HiddenField hf = (HiddenField)DataList1.Items[i].FindControl("HiddenField1");
                        Response.Write(hf.Value);
                    }

                }
            }
        }

私が使用しているjavascript...

function CheckOnes(spanChk){


var oItem = spanChk.children;
var theBox= (spanChk.type=="radio") ?
spanChk : spanChk.children.item[0];

xState=theBox.unchecked;
elm=theBox.form.elements;

for(i=0;i<elm.length;i++)
if(elm[i].type=="radio" &&
elm[i].id!=theBox.id)
{
elm[i].checked=xState;
}
}

このようなエラーが発生します

Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed. Common causes for this error are when the response is modified by calls to Response.Write(), response filters, HttpModules, or server trace is enabled.
Details: Error parsing near 'pload Demonstration|'.

これを行う他の方法はありますか、または誰かがこの問題を取り除くのを助けることができますか

4

2 に答える 2

0

問題はおそらく Response.Write() 呼び出しです。このブログ投稿をご覧ください。この特定の例外が表示される理由と、それを防ぐ方法について概説します。この StackOverflow スレッド もご覧ください。

于 2009-11-15T21:47:28.207 に答える
0

オーケーは応答書き込みを削除するだけです...今、私はコードビハインドで次のことをしています...残りは同じです

label5.text=hf.value.ToString();

このように更新パネルとネストされた更新パネルを使用すると、ラベルを評価できるようになりました

<asp:UpdatePanel ID="UpdatePanel9" runat="server" >
                <ContentTemplate>

                <asp:DataList ID="DataList1" runat="server" RepeatColumns = "4"  
                        CssClass="datalist1"  OnItemDataBound="SOMENAMEItemBound"
                CellSpacing="10" onselectedindexchanged="DataList1_SelectedIndexChanged" 
                        HorizontalAlign="Center" Width="500px">
                <ItemTemplate>
                <br />
                <table cellpadding = "5px" cellspacing = "0" class="dlTable">
                <tr>
                <td align="center">
                <a href="<%#Eval("FilePath")%>" target="_blank"><asp:Image ID="Image1" runat="server" CssClass="imu" ImageUrl = '<%# Eval("FilePath")%>' 
                Width = "100px" Height = "100px" style ="cursor:pointer" />
                </td>            
                </tr>
                <tr >
                <td align="center"> 
                    <asp:UpdatePanel ID="UpdatePanel3" runat="server">
                    <Triggers>
                   <asp:PostBackTrigger ControlID="rdb" />
                    </Triggers>
                          <ContentTemplate>          
                <asp:RadioButton ID="rdb" runat="server"  OnCheckedChanged="rdb_click" AutoPostBack="true"  /> 

                 </ContentTemplate> 
                </asp:UpdatePanel>

                <asp:HiddenField ID="HiddenField1" runat="server" Value = '<%#Eval("ID")%>' /> 
                </td>
                </tr>                     
                </table>

 </ItemTemplate> 

</asp:DataList>


         </ContentTemplate>
         </asp:UpdatePanel>

ページ全体をポストバックせずにこれを行う方法はありますか....asyncpostbackトリガーが機能しないようです

于 2009-11-16T06:46:41.370 に答える