避免ASP.NET页面中的数据冗余

时间:2011-09-22 10:25:23

标签: c# asp.net

我有一个asp.net页面,它使用listview显示2列数据。 第一列只有标签,第二列有下拉列表。

我担心的是,第二列中的下拉列表在100%的时间内具有相同的项目,它们永远不会更改,因为它是数据绑定的,并且这些下拉列表的数据源也是相同的。由于这些下拉列表位于列表视图中,因此重复发生在添加到列表视图的每一行中!

所以,我正在考虑删除通过线路传输的数据冗余。有什么想法吗?

3 个答案:

答案 0 :(得分:1)

如果您的数据源是数据库调用,那么您可以通过将调用结果存储在DataView对象中,然后将下拉列表绑定到该对象而不是为每个下拉列表调用数据库来减少这种情况。

答案 1 :(得分:1)

如果您使用的是ObjectDataSource,则可以减少加载时间enabling the cache

   <asp:objectdatasource ID="ObjectDataSource1" runat="server"
      EnableCaching="true" .... >
   </asp:objectDataSource>

答案 2 :(得分:0)

您可以使用以下方法:

它将项目加载到第一个DropDownList中,然后使用JQuery检索DropDownList,并将项目复制到所有其他项目中。

<强>标记

<div id="listViewContainer">
    <asp:ListView ID="listView1" runat="server">
        <ItemTemplate>
            <div><asp:DropDownList ID="dropDownList1" runat="server"></asp:DropDownList></div>
        </ItemTemplate>
    </asp:ListView>        
</div>

<强>脚本

$(function () {
    var sourceDropDown = $('#listViewContainer').find('select').first();

    $('#listViewContainer').find('select').not(sourceDropDown).each(function () {
        var dropdown = $(this);
        dropdown.find('option').remove();

        sourceDropDown.find('option').each(function () {
            var option = $(this);
            dropdown.append($('<option />').text(option.text()).val(option.val()));
        });
    });
});

<强>代码

    void listView1_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        if (e.Item.DisplayIndex == 0)
        {
            DropDownList dropDownList1 = (DropDownList)e.Item.FindControl("dropDownList1");
            dropDownList1.DataSource = dataTable;
            dropDownList1.DataTextField = "Text";
            dropDownList1.DataValueField = "Value";
            dropDownList1.DataBind();
        }
    }

希望这有帮助。