0

画面にリストを表示するためにリピーターを使用していました。レコードごとに<asp:checkbox、クリックされたかどうかに応じて、リアルタイムで DB の対応するテーブルに更新したい を追加しました.....これまでのところ、(JS を使用して) ASPX:

<th style="width:200px;"><asp:CheckBox Name='<%# CallUtilityChangeId((int)Eval("id")) %>' runat="server" 
onclick='UtilityChanged(<%#((int)Eval("id"))%>);'
Checked='<%# Convert.ToBoolean(Eval("Checked")) %>'/></th>  
<th style="width:200px;"><%# Eval("Comment") %></th>

C#

 protected string CallUtilityChangeId(int id)
    {
        return "Utilitychanged('" + id.ToString() + "');";
    }

JavaScript:

 function UtilityChanged(id) {
                    userId = userIdentifier;                     
                }

ソースコードは次を返します。

<th style="width:200px;">
<span Name="Utilitychanged(&#39;55&#39;);">
<input id="ctl00_ContentPlaceHolder1_rptSelectedUtilities_ctl01_ctl00" type="checkbox" name="ctl00$ContentPlaceHolder1$rptSelectedUtilities$ctl01$ctl00" onclick="UtilityChanged(&lt;%#((int)Eval(&quot;id&quot;))%>);" />
</span></th>  
<th style="width:200px;"></th> 

onclick="UtilityChanged(<%#((int)Eval("id"))%>);" の代わりに /> たとえば、UtilityChanged("71") を返すために必要です。識別番号だけです。IDの。

4

2 に答える 2

0

(without using page refresh)を使用することを意味しAjaxます。

.Netまず、サーバー制御がどのように通常のHTMLタグに解析されるかを理解する必要があります。

コードが次のようになっているとします。

<asp:Repeater Id="rpt">
......
   <asp:CheckBox ID="chkBox" runat="server" Name="someName" Checked="true" />
....
</asp:Repeater>

次のようにレンダリングされます。

<span name="someName">
    <input id="rpt_ctl00_chkBox" type="checkbox" name="rpt$ctl00$chkBox" checked="checked">
</span>

お気づきのように、ここには2つのことがあります::

  1. チェックボックスは<span>タグ内に含まれています。
  2. そのチェックボックスのIDandNameプロパティは.Net、親コンテナ(リピーター)" RepeaterId_ct100_CheckBoxId"に関連する何かで名前が変更されます。

次に、ビューエンジンに煩わされることなく値を取得したい場合、または.Netカスタム属性を使用しようとした場合。

長い紹介でごめんなさい。

解決::

<input id="chkBox" runat="server" type="checkbox" checked='<%# Eval("Your_Record_ColumnName")%>' onchange="YourJavascriptFunctionName(this);return false;" columId='<%# Eval("Column_Id")%>'/>

次に、JavaScriptを使用するかjQuery、その属性の値を取得します。

function YourJavascriptFunctionName(chk)
{
    recordId = $(chk).attr("columId");
    //then use ajax to update the DB Table.
}

別のことでajax呼び出しを行う方法..助けが必要な場合は教えてください。

于 2013-03-11T11:21:38.150 に答える
0

私が間違っている場合は修正してください。ただし、データベース コマンドで使用する ID 値をすべて非同期で取得できる、サーバー側イベントを持つリピーターにチェックボックスが必要なようですね。その場合は、更新パネルを使用してこれを行うことができます。

まず、更新パネルでリピーターをラップし、スクリプト マネージャーを追加する必要があります。

<asp:UpdatePanel ID="UpdatePanel4" runat="server" >                                                     
<ContentTemplate>
<!-- put repeater in here -->
</ContentTemplate>
</asp:UpdatePanel>

次に、サーバー イベントが添付されたチェックボックスを追加します。これはリピーター行に追加されます。ID 値を持つラベルも追加します。この例では、データ ソースによって追加されます。

<ItemTemplate>                            
<tr  class="listcolor">                        
<td style="display:none;border-right:0px solid  #808080  ; border-bottom:0px solid #808080;">
<asp:CheckBox ID="myCB" Text="Approved" runat="server" AutoPostBack="true" OnCheckedChanged="check_change"  /> 
</td>
<td style="display:none;border-right:0px solid  #808080  ; border-bottom:0px solid #808080;">
 <asp:label ID="userId" runat="server" Text='<%# DataBinder.Eval(Container.DataItem, "someId") %>'></asp:label>
</td>                              
</tr>
</ItemTemplate>  

ここで、チェック ボックス イベントを追加します。コントロールがサーバーにポストバックするとき、リピーターまたは同様のコントロールにある場合は、センダーをポストバックの原因となったオブジェクトにキャストし、その親行を取得して、ラベル コントロールを見つけることができます。

Protected Sub check_change(ByVal sender As Object, ByVal e As EventArgs)
     'first, cast the sender to a check box
     Dim cb As CheckBox = CType(sender, CheckBox)
     'then use that to find the label in its parent control ( the row its on)
     Dim userId As Label = CType(cb.Parent.FindControl("userId"), Label)
End Sub

それはそれを行う必要があります。ご不明な点がございましたら、お知らせください。

于 2013-03-11T11:00:30.033 に答える