2015-01-16 3 views
1

Ниже приведен базовый пример, объясняющий мою озабоченность. У меня есть listview, который получает данные от SQL Server и имеет событие OnItemDataBound, которое проходит через каждую строку данных. А в C# функция события ListView1_ItemDataBound вызывается для каждой строки, потому что когда я помещаю точку останова в функцию события ListView1_ItemDataBound, она прерывается один раз для каждой строки. Поскольку код, написанный на C#, выполняется на сервере (не уверен, что я прав на это), означает ли это, что пользователю нужно подключиться к моему серверу 10 раз в разное время (10 запросов на соединение), если есть 10 строк, которые были просмотрены в списке из базы данных? Если да, это не влияет на производительность сервера? Хорошо ли использовать OnItemDataBound?Функция Asp.net OnItemDataBound влияет на производительность?

ASPX

<asp:Listview ID="ListviewContent" runat="server" DataKeyNames="UniqueNo" DataSourceID="SqlDataSource1" OnItemDataBound="ListView1_ItemDataBound"> 
    <ItemTemplate> 
     <asp:Button id="btn_popup" text="Popup" runat="server" Visible="false" /> .................. 

C#

protected void ListView1_ItemDataBound(object sender, ListViewItemEventArgs e){...Find the button control and on certain condition make it visible or whatever you need...} 

ответ

1

Вот пример, который показывает, что множественные вызовы ItemDataBound события не соответствует браузер вызывает.

Вот ASPX:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Test.aspx.cs" Inherits="WebApplication2.Test" %> 

<!DOCTYPE html> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
     <div> 
      <asp:ListView ID="lvTest" runat="server" OnItemDataBound="lvTest_ItemDataBound" OnDataBinding="lvTest_DataBinding" OnDataBound="lvTest_DataBound"> 
       <ItemTemplate> 
        <asp:Label ID="lblName" runat="server" Text='<%# Eval("Name") %>'></asp:Label> 
       </ItemTemplate> 
      </asp:ListView> 
      <img src="http://blaugh.lockergnome.com/cartoons/070126_web_developer.gif" /> 
     </div> 
    </form> 
</body> 
</html> 

Вот код позади:

using System; 
using System.Collections.Generic; 
using System.Data; 
using System.Diagnostics; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace WebApplication2 
{ 
    public partial class Test : System.Web.UI.Page 
    { 
     DataTable dt; 

     protected void Page_Load(object sender, EventArgs e) 
     { 
      Debug.WriteLine("Page_Load"); 
      dt = new DataTable(); 
      dt.Clear(); 
      dt.Columns.Add("Name"); 

      DataRow mark = dt.NewRow(); 
      mark["Name"] = "Mark"; 
      dt.Rows.Add(mark); 

      DataRow bill = dt.NewRow(); 
      bill["Name"] = "Bill"; 
      dt.Rows.Add(bill); 

      lvTest.DataSource = dt; 
      lvTest.DataBind(); 
     } 

     protected void lvTest_ItemDataBound(object sender, ListViewItemEventArgs e) 
     { 
      Debug.WriteLine("ItemDataBound"); 
     } 

     protected void lvTest_DataBinding(object sender, EventArgs e) 
     { 
      Debug.WriteLine("DataBinding"); 
     } 

     protected void lvTest_DataBound(object sender, EventArgs e) 
     { 
      Debug.WriteLine("DataBound"); 
     } 
    } 
} 

А вот IE профилирование инструмент, который показывает, что только две просьбы были выполнены, один для ASPX и один для изображения. Не три (два для ItemDataBound и один для изображения.

enter image description here

Я не уверен на 100%, но я думаю, что под капотом ASP.NET вызывает ItemDataBound при построении экземпляра ListView/HTML, не как вы думаете, когда вы извлекаете данные из DataSource. Чтобы убедиться, что у вас нет нескольких вызовов, вы можете использовать упомянутый инструмент IE.

+0

Благодарим вас за помощь. Это делает ее более понятной для понимания. Извините за поздний ответ. – SpiderWeb

+0

Пожалуйста :). Нет проблем. – Landeeyo

 Смежные вопросы

  • Нет связанных вопросов^_^