检查RadListView ItemTemplate - 客户端中的RadButton复选框

时间:2015-02-09 17:49:29

标签: javascript c# jquery asp.net telerik

我只是试图设置telerik RadButton的复选框,该复选框位于客户端RadListView的项模板内(使用javascript / jquery)。

RadListView:

<telerik:RadListView runat="server" 
                     ID="parameterList" 
                     OnNeedDataSource="parameterList_NeedDataSource">
  <ItemTemplate>
    <tr>
      <td>
        <telerik:RadButton ToggleType="CheckBox" 
                           ButtonType="LinkButton"
                           runat="server"
                           ID="chkParameterType" 
                           AutoPostBack="False"
                           Text='<%# Eval("Description") %>
                           CssClass='<%# Eval("ParameterName") + "_button" %>'>
          <ToggleStates>
            <telerik:RadButtonToggleState PrimaryIconCssClass="rbToggleCheckboxChecked"/>
            <telerik:RadButtonToggleState PrimaryIconCssClass="rbToggleCheckbox" />
          </ToggleStates>
        </telerik:RadButton>
      </td>
    </tr>
  </ItemTemplate>
</telerik:RadListView>

我的jquery尝试首先尝试使用telerik的库,如this post

中所示
var listView = $find('<%= parameterList.ClientID %>');
var txbClientObject = $telerik.findControl(listView.get_element().parentNode, 
                                           "chkParameterType").get_value()
var current = txbClientObject.get_value();

txbClientObject以身份识别身份返回,因此currentcannot read property of null打破

我也尝试在直接jquery中按类名找到按钮。我担心这个,因为我相信在不同的浏览器中渲染可能会有所不同。

var button = $("." + name + "_button > input");  //"name" is parameterName
button.prop("checked", true);

这不会出错,通过它进行调试,它会找到按钮(或跨度),但也无法选中该框。

关于我做错的任何想法?

1 个答案:

答案 0 :(得分:1)

您运行此代码的事件是什么?它必须至少是Sys.Application.Load事件,否则控件实例可能仍未定义。

此外,Text属性中还有一个%>会破坏编译。

然后,findControl()将为您提供控件实例,您不需要在那里调用get_value()。

你应该考虑的是你想要的按钮,因为ListView可以有多个项目,这将为你提供第一个。

所以,这里有一些对我有用的东西:

<telerik:RadListView runat="server" 
                             ID="parameterList" 
                             OnNeedDataSource="parameterList_NeedDataSource">
            <ItemTemplate>
                <tr>
                    <td>
                        <telerik:RadButton ToggleType="CheckBox" 
                                           ButtonType="LinkButton"
                                           runat="server"
                                           ID="chkParameterType" 
                                           AutoPostBack="False"
                                           Text='<%# Eval("Description") %>'
                                           CssClass='<%# Eval("ParameterName") + "_button" %>'>
                            <ToggleStates>
                                <telerik:RadButtonToggleState PrimaryIconCssClass="rbToggleCheckboxChecked"/>
                                <telerik:RadButtonToggleState PrimaryIconCssClass="rbToggleCheckbox" />
                            </ToggleStates>
                        </telerik:RadButton>
                    </td>
                </tr>
            </ItemTemplate>
        </telerik:RadListView>
        <asp:Button ID="Button1" Text="get first button" OnClientClick="getFirstButton(); return false;" runat="server" />
        <script>
            function getFirstButton() {
                var listView = $find('<%= parameterList.ClientID %>');
                var txbClientObject = $telerik.findControl(listView.get_element().parentNode,
                                                           "chkParameterType");
                var current = txbClientObject.get_value();
                alert(txbClientObject.get_checked());
                alert(txbClientObject.get_text());
                txbClientObject.set_checked(true);
            }
        </script>

这是一个更完整的示例,它将向您展示如何使用CSS类获取任何所需元素,并通过指定LayoutTemplate提供有效的HTML:

<telerik:RadListView runat="server"
                             ID="parameterList"
                             OnNeedDataSource="parameterList_NeedDataSource"
                             ItemPlaceholderID="theItemPlaceHolder">
            <LayoutTemplate>
                <table>
                    <asp:PlaceHolder ID="theItemPlaceHolder" runat="server" />
                </table>
            </LayoutTemplate>
            <ItemTemplate>
                <tr>
                    <td class="buttonCell">
                        <telerik:RadButton ToggleType="CheckBox" 
                                           ButtonType="LinkButton"
                                           runat="server"
                                           ID="chkParameterType" 
                                           AutoPostBack="False"
                                           Text='<%# Eval("Description") %>'
                                           CssClass='<%# Eval("ParameterName") + "_button" %>'>
                            <ToggleStates>
                                <telerik:RadButtonToggleState PrimaryIconCssClass="rbToggleCheckboxChecked"/>
                                <telerik:RadButtonToggleState PrimaryIconCssClass="rbToggleCheckbox" />
                            </ToggleStates>
                        </telerik:RadButton>
                    </td>
                </tr>
            </ItemTemplate>
        </telerik:RadListView>
        <asp:Button ID="Button1" Text="get third button" OnClientClick="getThirdButton();return false;" runat="server" />
        <script>
            function getThirdButton() {
                var listView = $find('<%= parameterList.ClientID %>');
                var buttonCells = $telerik.$(".buttonCell", listView.get_element().parentNode);
                var txbClientObject = $telerik.findControl(buttonCells[2],
                                                           "chkParameterType");
                var current = txbClientObject.get_value();
                alert(txbClientObject.get_checked());
                alert(txbClientObject.get_text());
                txbClientObject.set_checked(true);
            }
        </script>