簡體   English   中英

如何通過用戶控件公開ITemplate?

[英]How to expose an ITemplate through a User Control?

為了更輕松地創建表單,我們使用了用戶控件中的修改后的Formview控件。 此用戶控件用於網格和FormView,您可以選擇網格中的項目,FormView以模式顯示以供查看/編輯:

<I2CL:Grid runat="server" ID="Grid" OnSelecting="Selecting" ShowCreate="true" />
<I2:Modal ID="SFModal" runat="server" UpdateMode="Conditional">
 <ContentTemplate>
     <I2:FormView runat="server" ID="FVSubForm" DefaultMode="Edit" DataSourceID="DSSubForm" />
     <I2:ILDataSource ID="DSSubForm" runat="server" />
 </ContentTemplate>
</I2:Modal>

在頁面中,控件如下所示:

<I2C:TabGrid ID="TG" runat="server" Property="ParentProperty">
  <Columns>
    <I2:Column Header="Column 1" DataSource="Column1" />
    <I2:Column Header="Column 2" DataSource="Column2" />
  </Columns>
  <EditItemTemplate>
    <I2Form:Dropdown ID="Col1" runat="server" SelectedValue='<%# Bind("Column1") %>' List="Column1Options" />
    <I2Form:Textbox ID="Col2" runat="server" Text='<%# Bind("Column2") %>' />
  </EditItemTemplate>
</I2C:TabGrid>

問題是我們使用的EditItemTemplate。 我可以弄清楚如何連接它的唯一方法是在TabGrid控件中有一個ITemplate並在OnInit中應用引用:

[PersistenceMode(PersistenceMode.InnerProperty), 
 TemplateContainer(typeof(FormView))]
public ITemplate EditItemTemplate { get; set; }

protected override void OnInit(EventArgs e)
{
 base.OnInit(e);
 FVSubForm.EditItemTemplate = EditItemTemplate;
}

這個問題是因為引用是用戶控件中的一個對象,所以與FormView中的字典條目相關聯的EditItemTemplate引用會被破壞,所以當你得到發送給數據源的更改字典時,它們就是每次回發都是空的。

這里使用的I2:ILDataSource是最接近ObjectDataSource的自定義實現。 它不是通用對象調用,而是直接調用頁面中的GetEntity() (或本例中的用戶控件)和UpdateEntity(obj Entity)進行保存。 由於這是一個非常具體的場景,我們可以消除ObjectDataSource中90%的代碼。

我希望能夠做的是點<EditItemTemplate><I2C:TabGrid>直接將<EditItemTemplate><I2:FormView>里面。 這是可能的,還是有人有其他路線的建議?

注意:我嘗試將FVSubForm上的EditItemTemplate公開為代理屬性,但這不起作用,因為在創建子控件之前在用戶控件上設置了屬性,因此FVSubForm為null。 如果這可以解決,我當然都是耳朵。

您需要做的一件事是將您的ITemplate屬性標記為支持雙向數據綁定:

[TemplateContainer(typeof(FormView), System.ComponentModel.BindingDirection.TwoWay )]

如果沒有這個,ASP.NET將不會為允許Bind()表達式工作的頁面生成正確的代碼。

我不確定你是否只需要這些,但這是值得嘗試的。

大衛

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM