Это действительно выглядит хорошо. Единственное, о чем я могу думать, это то, что событие не срабатывает, когда Eval («Fname») оценивается как Null.
Я бы попробовал
OnClientClick='<%# "return xx(" + String.IsNullOrEmpty(Eval("Fname").ToString()) ?
"debug - is this firing" : Eval("Fname") + ");" %>'
Очевидно, удалите отладочное сообщение, которое у вас работает
Ваша функция xx также неверна - я предполагаю, что это просто ошибка вырезания и вставки
function xx(fname) {
return confirm('Are you sure to delete ' + fname);
}
Примечание заканчивается }
И наконец - я бы действительно изменил имя xx
на более описательное. Я уверен, что это всего лишь отладочный / демонстрационный код, поэтому извиняюсь за то, что указал наш Просто чтобы подписаться на других читателей действительно.
EDIT
Я думаю, что это оно
OnClientClick="return xx('<%# Eval('Fname') %>');"
Обратите внимание на два дополнительных '
. Вам нужно передать это как строку, в противном случае вы получите странные эффекты в зависимости от того, что входит. Я бы по-прежнему остерегался пустых значений, как и раньше
Также Eval находится не в том месте - вы оцениваете всю строку javascript, но вам просто нужно заполнить поле данных.
РЕДАКТИРОВАТЬ 2
Я пытаюсь описать выше, и это просто не работает. Если бы я был тобой, я бы отказался от идеи использовать eval для построения OnClientClick
в разметке. Сделайте это с помощью кода в событии RowDataBound
, используя метод FindControl
, чтобы выбрать ссылку. Это определенно работает (честно)
Я думаю, это мое последнее слово, если честно. Удачи
Почти последнее слово - просто для полноты вот что я бы сделал
void detailsGridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
string foreName = DataBinder.Eval(e.Row.DataItem, "Fname").ToString();
LinkButton lnkButton = e.Row.FindControl("lnkLinkID") as LinkButton;
lnkButton.OnClientClick = "Delete message to " + foreName
}
}