研究 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(使用前将#替换为@)