GridView ButtonField вызывает постбэк? - PullRequest
3 голосов
/ 03 ноября 2011

У меня проблемы при использовании ButtonField для выдачи команды строки.

Когда я нажимаю кнопку ImageButton в ButtonField, IsPostBack имеет значение false

Насколько я понимаю, чтоImageButton в ButtonField в GridView должен привести к истине обратной передачи.

Вопрос : Может кто-нибудь объяснить, прав я или нет, и есть ли свойства для настройкиполе кнопки, чтобы заставить его выдать обратную передачу.

Некоторый код:

Page_Load(object sender, EventArgs e) 
{
    if (!IsPostBack)
    {
        m_DataTable = GetDataTable();      
        Session["m_DataTable"] = m_DataTable;
    }
    else
    {
        m_DataTable = Session["m_DataTable"];
    }
}

и позже в коде:

GridView1.Columns.Clear();

ButtonField cf = new ButtonField();
cf.HeaderStyle.CssClass = "comGridHeadCell";
cf.HeaderText = "some text";
cf.HeaderImageUrl = "images/something.png";
cf.Text = "action";
cf.CommandName = "action";
cf.ImageUrl = "images/something.png";
cf.ButtonType = ButtonType.Image;
cf.ItemStyle.CssClass = "comGridLink";

GridView1.Columns.Add(cf);

GridView1.DataSource = m_DataTable;
GridView1.DataBind();

также:

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AllowPaging="True" AllowSorting="True"  OnRowCommand="GridView_RowCommand" OnPageIndexChanging="GridView_PageIndexChanging">
  <PagerSettings PageButtonCount="25" />
</asp:GridView>

Редактировать: Я запускаю сайт в режиме отладки через VS2010.Я тестирую с использованием IE8.Если я использую Firefox, IsPostBack == true.Это похоже на конкретную проблему при отладке в IE8.

Ответы [ 2 ]

2 голосов
/ 03 ноября 2011

Вы создаете этот столбец при каждой загрузке?

Следующее срабатывание RowCommand срабатывает, как и ожидалось, и IsPostBack имеет значение true, как и ожидалось.

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

namespace WebApplication2
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                Debugger.Break();
            }
            else
            {
                Debugger.Break();
            }

            DataTable oDataTable = new DataTable();
            oDataTable.Columns.Add("animal");
            DataRow oDataRow = oDataTable.NewRow();
            oDataRow["animal"] = "cat";
            oDataTable.Rows.Add(oDataRow);

            GridView1.Columns.Clear();

            ButtonField cf = new ButtonField();
            cf.HeaderStyle.CssClass = "comGridHeadCell";
            cf.HeaderText = "some text";
            cf.HeaderImageUrl = "images/something.png";
            cf.Text = "action";
            cf.CommandName = "action";
            cf.ImageUrl = "images/something.png";
            cf.ButtonType = ButtonType.Image;
            cf.ItemStyle.CssClass = "comGridLink";

            GridView1.Columns.Add(cf);

            GridView1.DataSource = oDataTable;
            GridView1.DataBind();
        }


        protected void GridView_PageIndexChanging(object sender, GridViewPageEventArgs e)
        {

        }

        protected void GridView_RowCommand(object sender, GridViewCommandEventArgs e)
        {
            Debugger.Break();
        }
    }
}
1 голос
/ 03 ноября 2011

Проблема, скорее всего, связана с вашим динамическим созданием ButtonField.Когда вы динамически создаете элемент управления, он не генерирует события при обратной передаче, если вы не воссоздаете его при каждой обратной передаче на Page.Load или ранее.В каком обработчике событий находится ваш код ButtonField?

Я подозреваю, что Page.IsPostback == Неверно из-за этого, хотя я точно не знаю, почему он это сделал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...