- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我的一个页面中有一些 JavaScript,可以避免用户双击表单上的按钮并在异步回发期间导致双重提交的问题:
var prm = Sys.WebForms.PageRequestManager.getInstance();
prm.add_initializeRequest(InitializeRequest);
prm.add_endRequest(EndRequest);
var btn;
函数 InitializeRequest(发件人,args){
document.body.style.cursor = "等待";
var btnId = args._postBackElement.id;
btn = document.getElementById(btnId);
if (btn != null && (btn.type == "button"|| btn.type == "submit"))
btn.disabled = true;
}
函数 EndRequest(发件人,参数){
document.body.style.cursor = "默认";
如果(btn!= null)btn.disabled = false;
}
这不适用于 DataGrid ButtonColumns。 document.getElementById(btnId) 为这些返回 null。
如果我使用 TemplateColumn 并在其中放置一个 Button 控件,则效果很好。
查看为 DataGrid 呈现的 HTML,我可以看到 ASP.NET 没有为 ButtonColumn 输出 onclick,而它为 TemplateColumn 内的按钮输出:
按钮列:
<input type="submit" name="ctl00$placeholderContent$dgCommittees$ctl03$ctl00" value="Edit" />
TemplateColumn 中的按钮:
<input type="submit" name="ctl00$placeholderContent$dgCommittees$ctl03$cmdDelete" value="Delete" onclick="return confirm('Are you sure you wish to delete this committee?'); WebForm_DoPostBackWithOptions( new WebForm_PostBackOptions("ctl00$placeholderContent$dgCommittees$ctl03$cmdDelete", "", true, "", "", false, false))" id="ctl00_placeholderContent_dgCommittees_ctl03_cmdDelete" />
显然是“我如何使这项工作成功?”的答案。就是用 TemplateColumns 中的按钮简单地替换我所有的 ButtonColumns。
我很好奇是否有人知道 为什么 ASP.NET 以这种方式呈现 ButtonColumns,以及是否有某种方法可以让它像按钮一样呈现它们。
最佳答案
MS 有绑定(bind)字段的标准实现,它不会为 ButtonColumn 创建的按钮设置 ID 或属性。
更具体一点,每当网格创建单元格和后续按钮时,它都会调用 InitializeCell:
public override void InitializeCell(TableCell cell, int columnIndex, ListItemType itemType)
{
base.InitializeCell(cell, columnIndex, itemType);
if ((itemType != ListItemType.Header) && (itemType != ListItemType.Footer))
{
WebControl child = null;
if (this.ButtonType == ButtonColumnType.LinkButton)
...
else
{
child = new Button {
Text = this.Text,
CommandName = this.CommandName,
CausesValidation = this.CausesValidation,
ValidationGroup = this.ValidationGroup
};
}
...
cell.Controls.Add(child);
}
}
如您所见,这就是一个按钮的全部内容。
如果你想让它有 ID 和“onclick”属性,你可以使用这样的东西:
protected void grid_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
//assuming that a first cell is a ButtonField
//note that in edit mode a button may be at some other index that 0
Button btn = e.Row.Cells[0].Controls[0] as Button;
if (btn != null)
{
btn.OnClientClick = "return confirm('are you sure?')";
btn.ID = "myButtonX";
}
}
}
关于c# - DataGrid ButtonColumns 的空元素 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/768738/
我正在使用 ASP 数据网格,并且有一个 ButtonColumn。当按钮呈现到页面时,它是一个提交类型的输入。所以它是一个提交按钮。该按钮用于删除记录。但我想要一些 JavaScript 来确认用户
我的一个页面中有一些 JavaScript,可以避免用户双击表单上的按钮并在异步回发期间导致双重提交的问题: var prm = Sys.WebForms.PageRequestManager.get
我在 GridView 中添加带有按钮的列时遇到问题。 从下面的代码中可以看出,GridView 的数据源是 DataTable。我需要使用按钮向表中添加一个附加列。 从下面的代码中,我收到一条错误消
我是一名优秀的程序员,十分优秀!