2011-12-01 22 views
2
模板控制

我已經創建了具有單一的ContentTemplate其中我裝飾用[模板實例(TemplateInstance.Single)]屬性的ITemplate屬性自定義控制使所有內部控件直接可用,而無需使用FindControl來訪問它們。錯誤與屬性[模板實例(TemplateInstance.Single)]內的FormView

但是,如果我用我的控制在Formviews InsertTemplate則和EditItemTemplate中根據以下...

<asp:FormView runat="server" ID="formView"> 
    <InsertItemTemplate> 
     <my:Control runat="server" ID="myControl"> 
      <ContentTemplate> 
       <asp:TextBox runat="server" ID="textBox" /> 
      </ContentTemplate> 
     </my:Control> 
    </InsertItemTemplate> 
    <EditItemTemplate> 
     <my:Control runat="server" ID="myControl"> 
      <ContentTemplate> 
       <asp:TextBox runat="server" ID="textBox" /> 
      </ContentTemplate> 
     </my:Control> 
    </EditItemTemplate> 
</asp:FormView> 

...我得到一個錯誤信息,因爲兩個文本框(或任何其他控件)內我的ContentTemplate具有相同的ID:

「類XXX已經包含了一個定義的textBox」

我覺得這已經因爲InsertTemplate則和FormView控件的EditItemTemplate中RY怪都沒有提到的屬性,這樣裏面所有的控制應該得到作用域爲他們的模板裝飾。這也是上述樣品中的ID顯示「myControl」,即沒有給出衝突真的......

沒有人有任何想法如何解決這個問題?在模板秒,但我想它的工作因爲是因爲它是如此普遍,這裏面FormView控件模板控件具有相同的ID:現在我可以用不同的ID秒。

+0

我的同事發現這個bug報告是同樣的問題,只有模板控件是一個UpdatePanel:https://connect.microsoft.com/VisualStudio/feedback/details/373771/updatepanel-in-formview-name-conflict-編譯錯誤 –

回答

0

我知道這是晚了,但是當你定義TemplateInstance.Single,該框架允許直接引用的控制,因此ID的必須是唯一的。因此,你不需要FindControl(),但你也需要一個唯一的ID來引用。諸如ListView之類的控件具有ItemTemplate,它使用TemplateInstance.Multiple。這就是爲什麼某些模板因行爲而異的原因。