У меня есть представление сетки внутри панели обновлений. Одним из полей в представлении сетки является кнопка ссылки ASP.net , например:
Когда кто-то нажимает кнопку ссылки, я вызываю созданный мной метод OnClick
, который называется LoadLog
.
LoadLog выглядит следующим образом:
protected void LoadLog(object sender, EventArgs e)
{
GridViewRow gr = (GridViewRow)((DataControlFieldCell)((LinkButton)sender).Parent).Parent;
Label l = (Label)gr.FindControl("lblID");
DataSet ds;
ds = BL.GetRunoffAnswerLog(Convert.ToInt64(l.Text));
if (ds != null)
{
if (ds.Tables[0].Rows.Count == 0)
{
gvLog.Visible = false;
gvLog.DataSource = null;
lblRowsCount.Text = "No log for this record!";
}
else
{
lblRowsCount.Text = ds.Tables[0].Rows.Count.ToString() + " row(s) found for this record.";
gvLog.DataSource = ds.Tables[0];
gvLog.DataBind();
gvLog.Visible = true;
}
}
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "openDialog", "$('#dialog').dialog({draggable: true, modal: true, height: 500, width: 750, title: 'Log', open: function (type, data) {$(this).parent().appendTo('form');}});", true);
}
По сути, он получает дескриптор строки представления сетки, извлекает некоторые данные из базы данных и назначает их источнику gvLog. После этого обратите внимание на строку в конце:
ScriptManager.RegisterClientScriptBlock(this, this.GetType(), "openDialog", "$('#dialog').dialog({draggable: true, modal: true, высота: 500, ширина: 750, заголовок: "Журнал", открыть: функция (тип, данные) {$(this).parent().appendTo('form');}});", true);
Я должен сделать это, чтобы открыть свое диалоговое окно. Когда я щелкаю по строке в своем gridview ТОЛЬКО в первый раз, я получаю это:
Обратите внимание, что на самом деле отображается только заголовок ... странно. Но как только я снова нажимаю на ту же строку, отображается весь диалог:
Это происходит только при первом щелчке, если я продолжаю нажимать на разные строки, все работает нормально. Я должен добавить, что мне пришлось добавить следующий код jquery: