【发布时间】:2011-07-13 10:04:15
【问题描述】:
我有几个网页,每个网页都或多或少相同。他们每个人的顶部都有一个员工部分。下一部分是客户部分,之后部分是以前的订单。这两个在所有页面上都不是绝对必要的。最后一节是 cmets(博客)。
我从 2 页开始,没问题。我为每个页面编写了相同的(复制粘贴)代码(提供或获取一些细节)。销售给(诱饵)这个给客户,客户饿了.. more more MORE... 现在我有 10 页或多或少相同的代码。
现在我在想是否可以通过重复使用相同的“控件”来减少开发时间。所以开始做一些 ascx (4),认为我可以在每个页面(员工、客户、销售、博客)中重用这 4 个控件。
我遇到了一个小问题,谷歌告诉我 - “不,不,这不是你使用 ascx 的方式”。 ascx 只是一个新的“asp:label”/“asp:textbox”,其中可能包含一些额外的逻辑。
Snatch being - 我制作了一个包含 4 个控件中的每一个的 NewTest.aspx,但我没有从控件中看到 asp:formview / asp:detailsview 等。我可以在 formview 周围放置“hello worlds”,就在之前,就在之后 - 但不能在 <formview></formview> 内。
我哪里错了,我需要重新考虑什么?
NewTest.aspx
<table width="800">
<tr>
<td>
<IIT:EmployeeRecord ID="test1" runat="server" />
</td>
</tr>
</table>
我使用 ObjectDataSource 并从 Session 中提取员工 ID。员工记录 - 他的姓名、带有他的邮政编码的下拉列表(仅限销售代表)和搜索字段。基本上是一个带有一些额外逻辑的文本框。
所有底层逻辑(BLL、DAL、模型等)都完全相同。项目的其余部分编译和运行与我开始使用 ascx 之前完全相同。
编辑:我正在努力 KSS,如果我可以让 EmployeeRecord 显示,那么我可以复制粘贴这个想法。
从 webconfig 开始:
<pages>
<controls>
<add tagPrefix="IIT" tagName="Comments" src="~/DynamicData/FieldTemplates/Comments.ascx" />
<add tagPrefix="IIT" tagName="OrderRecord" src="~/DynamicData/FieldTemplates/OrderRecord.ascx" />
<add tagPrefix="IIT" tagName="CustomerRecord" src="~/DynamicData/FieldTemplates/CustomerRecord.ascx" />
<add tagPrefix="IIT" tagName="EmployeeRecord" src="~/DynamicData/FieldTemplates/EmployeeRecord.ascx" />
</controls>
</pages>
Intellisense 可以识别 EmployeeRecord 和 OrderRecord,但不能识别 Comments 和 CustomerRecord。 编辑:Intellisense 现在可以识别它们。
员工记录
<asp:formview ID="fv_empDetail" runat="server" datasourceID="ods_empDetail">
<itemtemplate>
<table>
<tr>
<td>
Medarbejder:
</td>
<td>
<asp:TextBox ID="tbEmployeeName" runat="server" ReadOnly="true" Text='<%# Bind("name") %>' BorderStyle="None"></asp:TextBox>
</td></tr>
</table>
</ItemTemplate>
</asp:FormView>
<asp:ObjectDataSource ID="ods_empDetail" runat="server" SelectMethod="GetEmployee"
TypeName="xxxxxx.EmployeeBLL">
<SelectParameters>
<asp:SessionParameter Name="employee" DbType="String" SessionField="employee" />
</SelectParameters>
</asp:ObjectDataSource>
(任何拼写错误仅供您欣赏;),真实代码中没有拼写错误)
【问题讨论】:
-
对我来说听起来你绝对是在正确的轨道上; 10 种剪切和粘贴形式(螺旋成 50...然后 100...:D)将是维护的噩梦,重构为通用代码绝对是最佳实践。但是,如果没有更多信息,我不确定如何解决这个问题:有什么方法可以创建一个演示项目来演示你在说什么并提供代码?这将使我们能够具体地查看和查看问题所在,而不仅仅是试图找出如何从文本描述中重现问题。 :) 谢谢!
-
如果我能给你一点建议。由于您似乎真的致力于使用架构模式、组织代码、“在正确的地方做正确的事情”等,请查看 asp.net MVC 的表示层。它提供了更符合 Web 标准的方法、可测试性等等。如果你需要更有说服力,stackoverflow 和整个堆栈交换网络都是用 asp.net Mvc 构建的 :)