我使用htmlinputtext设计了我的页面,如下所示
<asp:TemplateField>
<ItemTemplate>
<asp:Label ID="lblTrialPeriodEnds" runat="server" Text='<%# Eval("trialPeriodEnds","{0:dd/MM/yyyy}") %>'></asp:Label>
</ItemTemplate>
<HeaderTemplate>
TrialPeriodEnds
</HeaderTemplate>
<EditItemTemplate>
<input type="text" name="testinput" class="textbox" value='<%# Eval("trialPeriodEnds") %>'
id="txtEffectiveDate" runat="server" />
<a onclick="showCalendarControl('txtEffectiveDate')" href="#">
<img alt="cal" src="calendar.gif" style="width: 20px; height: 20px" border="0" /></a>
</EditItemTemplate>
</asp:TemplateField>
我在rowupdating中的代码如下
HtmlInputText htmInput = (HtmlInputText)GridView1.Rows[e.RowIndex].FindControl("Daily");
strExpiry = htmInput.Value;
我收到错误,因为对象引用未设置为对象的实例。
为什么显示可以告诉
答案 0 :(得分:4)
您使用的输入是HTML输入标记。为了使ASP.NET能够看到此标记,您必须包含runat =“server”属性。这将向ASP.NET表明它应该跟踪标记,您将能够从代码中与它进行交互。如果没有此标记,ASP.NET将不知道控件,因此在调用FindControl时它不会显示。
请注意,当您让ASP.NET知道控件时,它可能会修改ID。这样ASP.NET就可以确保每个控件都具有唯一的ID。您的示例在GridView中具有控件,因此将修改输入控件的ID,以便ASP.NET知道该控件是GridView的子控件。您需要修改任何客户端脚本以了解新ID。我提醒不要检查HTML中的ID,然后只需指定新ID,因为ASP.NET结构的修改可以更改ID。您在评论中提到您正在使用jQuery。我建议使用一个类,并让jQuery根据输入控件的类分配控件。