- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这可能看起来像是重复的,但我不这么认为。我已经搜索过 stackoverflow,可能还不够。
这是我的挑战:
<asp:LinkButton runat="server" ID="DeleteRow" CommandName="deleterow"
CommandArgument='<%# Eval("ID") %>' Text="Delete"
OnClientClick="return confirm('Are you sure you want to delete this record?');" />
如果您第一次单击该链接,则不会触发 OnRowCommand。当您第二次单击它时,它会起作用。
我查看了源代码,发现了这些差异。
//When you first load the page: the GUID is the PK for that row
1. javascript:__doPostBack('ctl00$content$gvSchoolClasses$58fd1759-f358-442e-bf73-2e9cedfc27e8$DeleteRow','')
//After the link was clicked the first time, the link changed and the ID empty, but works
2. javascript:__doPostBack('ctl00$content$gvSchoolClasses$ctl02$DeleteRow','')
我从 asp:LinkButton
的 href
复制了点击前和点击后的两个代码。
怎么了?我的页面上只有一个事件 RowDataBound
。
protected void gvSchoolClasses_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.ID = Guid.NewGuid().ToString();
}
protected void Page_Load(object sender, EventArgs e)
{
CheckAuthentication();
if (!Page.IsPostBack)
{
ClassesAcademicYearLabel.Text = "- Year " + Setting.Year;
//FillClassesList(); //filling some combo boxes. Have checked the codes here too
//FillLettersList(); //they didn't affect the Grid
FillGrid();
}
ClassErrorLabel.Visible = false;
}
最佳答案
通过在 RowDataBound
事件中设置行的 ID 属性,您已经创建了您正在观察的问题。
由于 RowDataBound
事件直到页面的控件已添加到集合中后才会被触发,因此 ASP.NET 无法更新已计算的客户端引用。因此,该命令不会以您期望的方式被触发。
我注意到您已经将 CommandArgument
属性设置为在 RowDataBound
事件中生成的 ID,这也可能是您问题的一部分(取决于事件触发的顺序;我手边没有管道图)。
编辑:对此的快速修复可能是简单地将 ClientID 属性(抱歉,不是确切的名称,但智能感知应该让您完成剩下的事情)设置为某种手动而非自动确定。这样,您设置的 ID 永远不会被框架更改。
要详细说明为什么会出现此问题,请考虑提供的客户端 ID:
ctl00$content$gvSchoolClasses$ctl02$DeleteRow
通过获取已声明的 ID (DeleteRow
) 并连续向上遍历控件层次结构并将父 ID 添加到字符串中,可以保证此 ID 是唯一的(对于此页面)。 JS 代码可以确信将此字符串传递给 getElementById
将以一致、可预测的方式运行。
为了能够生成所述 ID,层次结构中的所有控件都必须已经存在并由呈现引擎说明。
现在让我们考虑当控件的 ID 属性更改时会发生什么(注意这不是 ClientID
,而只是名称为 ID
的属性) .
ctl00$content$gvSchoolClasses$58fd1759-f358-442e-bf73-2e9cedfc27e8$DeleteRow
您会注意到,该行的命名容器 (cl02
) 不再是行的命名容器,而是您生成并分配给它的 GUID。尝试使用先前分配的 ID 访问此容器的客户端 JS 将会失望,因为它将不再按预期工作!
当 ASP.NET 控件通过调用 javascript:__doPostBack('ctl00$content$gvSchoolClasses$58fd1759-f358-442e-bf73-2e9cedfc27e8$DeleteRow','')
回发会很好地发生,但是(你可以通过检查回发的表单参数来验证这一点)当服务器处理请求时,它将尝试(从 View 状态)重新水化一个不'存在。因此,它将创建一个不知道已发出命令的控件的新实例(具有正确的 ID),因此永远不会触发 XXXCommand
事件。由于没有发生数据绑定(bind)(这是一个回发,并且您的代码正确地检查了该条件),因此 ID 永远不会重置,并且命令可以正常触发
关于c# - GridView RowCommand 不是第一次触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11420260/
我正在尝试以编程方式在 ASP.NET 中添加一个按钮,以 C# 作为后端。我能够显示该按钮,但当用户单击该按钮时 RowCommand 没有被触发。 我认为问题在于我在用户单击“提交”按钮后创建按钮
这可能看起来像是重复的,但我不这么认为。我已经搜索过 stackoverflow,可能还不够。 这是我的挑战: ' Text="Delete" OnClientClick="return con
Gridview RowCommand 没有在服务器上触发,但是当我在本地系统上使用它时它可以工作。但是当我发布并发布到服务器时 RowCommand 没有被触发..你能给我一个解决方案吗...这是我
我已经找到了解决方案,我只是想发布它,以便对某些人有用 这是使用命令的按钮
我有一个显示产品版本的网格和一些链接按钮,如编辑、删除、预览等。单击编辑按钮后,我想获取产品 ID 和版本 ID,并重定向到某个 xyz.aspx 页面,可以在其中编辑产品详细信息。 这是我的网格的样
我有一个看起来像这样的 GridView: ... '
' runat="server" Text="View"> 代码隐藏: protected void t
当调用 rowcommand 时,我尝试跨多个命令参数发送: ' />
' runat="server" Text="View"> 代码隐藏: protected void t
我的 GridView 基本上显示数据库中数据的汇总版本。 我想做的是设置它,以便当您单击 GridView 中一行中的任意位置时,它应该执行一个设置过程,该过程将隐藏包含 GridView 的面板并
首先,我意识到其中的大部分也可以使用 ItemTemplates 来完成。如果我尝试做的事情根本不可能,我会考虑改用它们。 以下是我的困境的基本情况: 我在代码隐藏中加载的 ASPX 页面中有一个 G
来自德国的美好下午, 我在带有 RowCommand 事件的行上有一个 asp:GridView 和 ButtonFields。 protected void gridView_RowCommand(
我正在尝试将 TextBox 中的 Value 转换为 gridview 的 RowCommand 中的 int。 else if (e.CommandName == "UpdateRow") {
您好,我有一个 GridView ,每行都有一个文本框,我正在尝试获取 RowCommand 事件中的值。下面的代码适用于除第一行以外的所有行。第一行的 textbox.text 值始终为空。
我在 aspx 中使用 gridview,我有两个页面,注册和 details.aspx 一旦注册完成,它应该转到 details.aspx 中的详细信息页面。我在那个 GV 中保留了一个 gridv
我有一个 asp.net GridView: ' CommandName="ViewFactors" ImageUrl="~/tadarokat/Images/factor
我有一个 gridview,在这个 gridview 上有一个 linkbutton。 单击链接按钮时,rowCommand 触发,但是我想要求用户使用确认框确认单击, 如果是 -> rowComma
有谁知道如何从 ASP 中的 Gridview RowCommand 事件调用 Javascript 函数? 我需要调用函数来接收 rowindex 但我不知道如何从 rowcommand 调用 ja
我有一个带链接按钮的 GridView 。我使用 jquery 和 css 为链接按钮设置了一个灯箱。 链接按钮源代码 '
我正在使用 GridView绑定(bind)到 List .当RowCommand被某个按钮触发 我希望能够检索当前行的 Customer来自 e.CommandArgument 的对象,像这样: p
我是一名优秀的程序员,十分优秀!