2010-08-13 86 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