无法将datepicker绑定到detailsview中的edititemtemplate

时间:2016-10-13 16:13:18

标签: jquery asp.net datepicker detailsview

我在详情视图中有以下模板来编辑日期:

<EditItemTemplate>
                        <asp:TextBox id="EndDate" class="datefield" text='<%# Bind("EndDate")%>' runat="server"/>
                    </EditItemTemplate>

我正在使用带有以下代码的按钮切换到编辑模式:

protected void Edit_Assignment(object sender, EventArgs e) {

            if (_gvAssignments.CurrentMode != DetailsViewMode.Edit) {
                _gvAssignments.ChangeMode(DetailsViewMode.Edit);
            }


        }

我还有一个文档就绪和一个onclientclick函数来调用datepicker。

$(document).ready(function() {
            $("#tabs").tabs();
            $(".datefield").datepicker();
            $("#StartDate").datepicker();
            $("#EndDate").datepicker();
        });

        function updateDatepickFields() {
            alert("Button clicked");
            $(".datefield").datepicker();
            $("#StartDate").datepicker();
            $("#EndDate").datepicker();
        };
        $(".datefield").on("focus",function() {
            $(".datefield").datepicker();
        });

然而,无论我使用什么代码,它似乎都没有附加日期选择器。

1 个答案:

答案 0 :(得分:0)

在浏览器中右键单击您的页面,执行Inspect Element,然后找到您的EndDate元素。您会注意到它的ID呈现完全不同的东西!这是因为ASP.Net将重命名服务器端控件以避免身份冲突。

考虑到这一点,您可能会开始意识到这个问题 - 在Jquery中引用$('#EndDate')将不起作用,因为没有带有该ID的元素。

最简单的选择是将ClientIDMode="static"属性添加到文本框中:

<asp:Textbox runat="server" ClientIdMode="static" ID="EndDate">

这会强制元素使用给定的ID进行渲染,而不是“重写”。然后,您可以像平常一样访问这些元素并以愉快的方式进行访问。

如果您有<asp:Repeater><asp:GridView>之类的内容,请避免使用此方法。由于元素重复,这将导致重复的ID。在这种情况下,请使用ClientIdMode="Predictable",这会将您的商品更像EndDate_0EndDate_1,等等。