.NET 4.5 WebForms:我(仍然)真的必须在 FormView 中指定所有 3 个模板吗?

2024-01-10

研究 ASP.NET 4.5 WebForms 中新的强类型、模型绑定方法:

In 斯科特·汉塞尔曼的例子 http://www.hanselman.com/blog/OneASPNETSneakPeekElegantWebFormsAndSnowballsInHell.aspxWebForms 模型绑定(除其他外)的我已经看到了在“编辑”模式下打开的 FormView 的使用,其中包含许多DynamicControls e.g.

<asp:FormView runat="server" ID="MyForm" ... DefaultMode="Edit">
  <EditItemTemplate>
    <asp:DynamicControl runat="server" ID="Field1" DataField="Field1" Mode="Edit" />
    <asp:DynamicControl runat="server" ID="Field2" DataField="Field2" Mode="Edit" />
  </EditItemTemplate>
</asp:FormView> 

在我的情况下,我的 FormView 的ItemTemplate, EditItemTemplate and InsertItemTemplate将是相同的,只是 ItemTemplate 的控件将处于“只读”模式。

我(仍然)真的需要在 FormView 中提供三个几乎相同的模板副本吗?

我很高兴使用 DynamicControls,但这里的团队永远不会采用看似 FormView 所需的“3x 复制粘贴”方法,尤其是对于我们的大型模板。

我原以为也许:

  • DynamicControls 可以从包含的 FormView 获取它们的“模式”吗?
  • 我可以使用 FormView 以外的其他内容来包含我的 DynamicControls 吗?
  • 我应该在代码隐藏中管理 DynamicControls 模式以避免模板重复吗?

有什么例子/想法吗?


不,您不必指定所有 3 个模板。我也遇到过同样的情况,这是我的解决方案:

  • 将默认模式设置为最常用的模式
  • 然后在表单的代码后面管理表单模式
  • 在后面的代码中复制模板,例如您手动编码为您需要的另一个模板的 EditTemplate

    protected void Page_Init()
    {
        var action = RouteData.Values["action"].ToString();
    
        switch (action)
        {
            case "add":
                personForm.ChangeMode(FormViewMode.Insert);
                this.Page.Title += " Add";
                break;
            case "edit":
                personForm.ChangeMode(FormViewMode.Edit);
                this.Page.Title += " Change";
                break;
            default:
                personForm.ChangeMode(FormViewMode.ReadOnly);
                break;
        }
    
        // Reuse inserttemplate for editing
        if (personForm.CurrentMode == FormViewMode.Edit)
        {
            personForm.EditItemTemplate = personForm.InsertItemTemplate;
        }
    
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

.NET 4.5 WebForms:我(仍然)真的必须在 FormView 中指定所有 3 个模板吗? 的相关文章

随机推荐