我在详情视图中有以下模板来编辑日期:
<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();
});
然而,无论我使用什么代码,它似乎都没有附加日期选择器。
答案 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_0
,EndDate_1
,等等。