2012-03-09 3 views
0

Я использую выражение привязки данных <%#Eval("sectionId") %> для привязки данных к моему коду спереди. Я устанавливаю этот sectionId в моем коде behinde используя следующий код,Eval(), отображающее нулевое значение

public partial class ProductDetails : System.Web.UI.Page 
    { 
     private string sectionId = string.Empty;   

     protected void Page_Load(object sender, EventArgs e) 
     { 
      if (!Page.IsPostBack) 
      { 
       if (Request.QueryString.Count > 0) 
       { 
        if (Request.QueryString["secId"] != null || Request.QueryString["prodId"] != null) 
        { 
         sectionId = Request.QueryString["secId"].ToString(); 

        } 
       } 
      } 
     } 
    } 

где в моей странице .aspx я есть такой код,

<a href="SectionWiseProduct.aspx?secId=<%#Eval("sectionId") %>">Enviro Section</a> 

каждое значение времени для sectionId успешно установлен в код behinde, но это не отражается на времени UI page.every я получаю ссылку как,

SectionWiseProduct.aspx?secId= 

может кто-нибудь пожалуйста, предложите это я делаю правильно или я Есть ли другой способ сделать это. А также вызов page_Load дважды, это из-за Eval?

ответ

0

внести изменения в свой код, который будет работать

public string sectionId = string.Empty; 

надеюсь, что это помогает !!!

0

Минимизация звонки в DataBinder.Eval

Метод DataBinder.Eval использует отражение, чтобы оценить аргументы, которые передаются в и возвращать результаты. Если у вас есть таблица, содержащая 100 строк и 10 столбцов, вы вызываете DataBinder.Eval 1000 раз, если вы используете DataBinder.Eval для каждого столбца. В этом случае ваш выбор использовать DataBinder.Eval умножается на 1000 раз. Ограничение использования DataBinder.Eval во время операций привязки данных значительно повышает производительность страницы. Рассмотрим элемент ItemTemplate в элементе управления Repeater, используя DataBinder.Eval.

<ItemTemplate> 
    <tr> 
    <td><%# DataBinder.Eval(Container.DataItem,"field1") %></td> 
    <td><%# DataBinder.Eval(Container.DataItem,"field2") %></td> 
    </tr> 
</ItemTemplate> 

В этом сценарии есть альтернативы использованию DataBinder.Eval. Альтернативы включают следующее:

Использовать явное литье. Использование явного кастинга обеспечивает лучшую производительность, избегая затрат на отражение. Вставьте Container.DataItem в DataRowView.

<ItemTemplate> 
    <tr> 
    <td><%# ((DataRowView)Container.DataItem)["field1"] %></td> 
    <td><%# ((DataRowView)Container.DataItem)["field2"] %></td> 
    </tr> 
</ItemTemplate> 

Вы можете получить еще более высокую производительность с явной отливкой, если вы используете DataReader, чтобы связать свой контроль и использовать специализированные методы для извлечения данных. Вставьте Container.DataItem как DbDataRecord.

<ItemTemplate> 
    <tr> 
    <td><%# ((DbDataRecord)Container.DataItem).GetString(0) %></td> 
    <td><%# ((DbDataRecord)Container.DataItem).GetInt(1) %></td> 
    </tr> 
</ItemTemplate> 

Явное литье зависит от типа источника данных, к которому вы привязываетесь; предыдущий код иллюстрирует пример.

Используйте событие ItemDataBound. Если запись, связанная с данными, содержит много полей, может быть более эффективным использование события ItemDataBound. Используя это событие, вы только выполняете преобразование типа один раз. В следующем примере используется объект DataSet.

protected void Repeater_ItemDataBound(Object sender, RepeaterItemEventArgs e) 
{ 
    DataRowView drv = (DataRowView)e.Item.DataItem; 
    Response.Write(string.Format("<td>{0}</td>",drv["field1"])); 
    Response.Write(string.Format("<td>{0}</td>",drv["field2"])); 
    Response.Write(string.Format("<td>{0}</td>",drv["field3"])); 
    Response.Write(string.Format("<td>{0}</td>",drv["field4"])); 
} 
+0

, спасибо за ответ, можете предложить мне какое-либо решение, с помощью которого я могу привязать данные к простому элементу управления HTML.Beacuse. Я хочу привязать данные к тегу ''. –

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