我是在正确的轨道上(ASPX,ascx,设计)

时间:2011-07-13 10:04:16

标签: c# asp.net ascx

我有几个网页,每个网页都或多或少相同。他们每个人都有一个顶部的员工部分。下一部分是客户部分,之后的部分是先前的订单。这两个并非在所有页面上都是必需的。最后一部分是评论(博客)。

我从2页开始,没问题。我为每个页面编写了相同的(复制粘贴)代码(给出或采取一些细节)。销售给顾客带来了(诱饵),顾客感到饥饿..更多更多...现在我有10页,或多或少相同的代码。

现在我想我可以通过重复使用相同的“控件”来减少开发时间。所以开始做一些ascx(4),认为我可以在每个页面(员工,客户,销售,博客)重用这4个控件。

我遇到了一个小抓举,谷歌告诉我 - “不,不,不,你不是如何使用ascx”。 ascx只是一个新的“asp:label”/“asp:textbox”,可能还有一些额外的逻辑。

抢夺 - 我用4个控件中的每个控件创建了一个NewTest.aspx,但是我没有从控件中看到asp:formview / asp:detailsview等。我可以在形式视图中放置“hello worlds”,就在之前,之后 - 但不在<formview></formview>内。

我哪里出错了,我需要重新考虑什么?

NewTest.aspx

    <table width="800">
        <tr>
            <td>
                <IIT:EmployeeRecord ID="test1" runat="server" />
            </td>
        </tr>
     </table>

我使用ObjectDataSource并从Session中提取员工ID。员工记录 - 他的名字,带有他的zipcodes的下拉列表(仅限salesrep)和搜索字段。基本上是一个带有一些额外逻辑的文本框。

所有基础逻辑(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,但不能识别Comment和CustomerRecord。 编辑:智能感知现在可以识别它们。

EmployeeRecord

<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>

(任何拼写错误仅供您使用;),实际代码中没有拼写错误

3 个答案:

答案 0 :(得分:2)

将MasterPage用于您的项目。如果您认为某些常见特定页面组的信息与其他组无关,那么请对这些特定页面组使用嵌套母版页。

使用嵌套的主页将使您的根母版页保持清晰,并且也将用于其他页面。

您也可以按照@Umar给出的开发用户控制的链接进行操作,或者参考以下内容:

Create ASP.NET user control

My User Control

答案 1 :(得分:0)

为什么不创建一个母版页,其中包含所有页面共有的所有信息,然后只填写特定于页面的信息?

答案 2 :(得分:0)

如果我已正确理解您的问题,您要做的是将Web控件(自定义或其他)放在您自己的自定义控件中。

我认为你要做的是创建模板化的ASP.NET控件。请参阅文章How to: Create Templated ASP.NET User Controls

这将使您能够在ASPX / ASCX文件中编写如下内容。

<uc:TemplateTest runat="server">
  <MessageTemplate>
    <asp:Label runat="server" ID="Label1" Text='Foo!!' />
    <br />
    <asp:Label runat="server" ID="Label2" Text='Bar!!' />
    <hr />
  </MessageTemplate>
</uc:TemplateTest>

注意:这个例子改编自上面链接的文章。

注意asp:Label的{​​{1}}元素中有两个MessageTemplate标记。