0

正在使用中继器在屏幕上显示列表。对于每条记录,我添加了一个<asp:checkbox,我希望将其实时更新到数据库中的相应表中,具体取决于它是否被单击.....到目前为止,我得到了:(使用 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") 例如。只是识别号。的身份证。

4

2 回答 2

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>  

现在,添加复选框事件。当控件回发到服务器时,如果它在转发器或类似控件中,您可以将 sender 强制转换为导致回发的对象,然后获取其父行,然后找到标签控件:

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 回答
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>

如您所见,这里有两件事:

  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 回答