2010-08-13 83 views
0

我设计我的网页用的HtmlInputText如下HtmlInputTextbox显示错误

<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; 

我得到一个错误的对象引用未设置为一个实例的一个对象。

为什么它能够显示任何在告诉

回答

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根据输入控件的类来分配控件。

+0

但添加runt =“服务器”不提高我的日历 – Dotnet 2010-08-13 04:28:33

+0

不确定你的意思。代码中没有您发布的日历。 – sgriffinusa 2010-08-13 04:30:35

+0

我用日历来弹出使用jquery,当我点击里面的文本框,如果我使用runat =“服务器”我不会得到那一个 – Dotnet 2010-08-13 04:50:38