是的,我害怕这些问题中的另一个。我确实在ASP.NET Web窗体控件中浪费了大量时间来修复和重新组合挑剔的回调事件。
这是一个曾经有效的页面,但现在不是,我看不到任何相关的变化。我已经将页面简化为基础,并添加了一个笨拙的数据源以消除任何可能的外部影响。
尽管如此,它仍然没有引发OnCommand
控件的LinkButton
事件
我已经给了它两个选择但是没有被召唤:
OnRowAction
方法 - 通过OnCommand
属性OnRowCommand
方法 - 从GridView.OnRowCommand
侦听器引用。以下是代码:
<%@ Page Title="Completion Report Results" Language="C#" MasterPageFile="~/PageTemplates/Site.Master" AutoEventWireup="true" CodeBehind="CompletionResults.aspx.cs" Inherits="PlatformNET.LRN.Reports.CompletionResults" %>
<%@ MasterType VirtualPath="~/PageTemplates/Site.Master" %>
<asp:Content ID="Content3" ContentPlaceHolderID="MainContent" runat="server">
<asp:GridView ID="UserGrid" runat="server"
AllowPaging="True" AutoGenerateColumns="False" GridLines="None"
DataKeyNames="UserID"
OnRowCommand="OnRowCommand"
CssClass="stripey"
HeaderStyle-CssClass="header"
PagerStyle-CssClass="footer"
SortedAscendingHeaderStyle-CssClass="currentsortcolumn"
SortedDescendingHeaderStyle-CssClass="currentsortcolumn">
<Columns>
<asp:TemplateField HeaderText="Action">
<HeaderStyle CssClass="c" />
<ItemStyle CssClass="c" />
<ItemTemplate>
<asp:LinkButton ID="ManageUserLink" runat="server" OnCommand="OnRowAction" CommandName="ManageUser" CommandArgument='<%# Eval("UserID") %>'>Manage</asp:LinkButton>
<asp:LinkButton ID="TrainingRecLink" runat="server" OnCommand="OnRowAction" CommandName="TrainingRec" CommandArgument='<%# Eval("UserID") %>'>Record</asp:LinkButton>
</ItemTemplate>
</asp:TemplateField>
<asp:BoundField HeaderText="UserID" DataField="UserID">
<HeaderStyle CssClass="c" />
<ItemStyle CssClass="c" />
</asp:BoundField>
</Columns>
</asp:GridView>
</asp:Content>
这是背后的代码:
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Web.Caching;
using System.Web.UI.WebControls;
using AssessmentClassLib.BLL.QueryHelpers;
using AssessmentClassLib.BLL.Reporting;
using AssessmentClassLib.DAL;
using PlatformNET.BLL;
using PlatformNET.CustomControls;
using PlatformNET.LRN.BLL;
namespace PlatformNET.LRN.Reports
{
public partial class CompletionResults : ReportingPage
{
protected void Page_Load(object sender, EventArgs e)
{
ReportType = "Completion";
if (!Page.IsPostBack)
BindGrid();
base.MakeBreadcrumb(ReportingPageID.completionList);
}
internal class DummyItem
{
public int UserID { get; set; }
}
protected void BindGrid()
{
var dummy = new List<DummyItem>();
for (var i = 0; i < 20; i++)
dummy.Add(new DummyItem() { UserID = i });
UserGrid.AllowPaging = true;
UserGrid.AllowCustomPaging = true;
UserGrid.VirtualItemCount = 100;
UserGrid.PageSize = 20;
UserGrid.PageIndex = 0;
UserGrid.DataSource = dummy;
UserGrid.DataBind();
}
protected void OnRowAction(object sender, CommandEventArgs e)
{
Debug.WriteLine("OnMyCommand(\"{0}\",\"{1}\")", e.CommandName, e.CommandArgument);
}
protected void OnRowCommand(object sender, GridViewCommandEventArgs e)
{
Debug.WriteLine("OnRowCommand(\"{0}\",\"{1}\")", e.CommandName, e.CommandArgument);
}
}
}
检查完成:
LinkButton
控件不是动态生成的,而是Cell模板的一部分LinkButton
控件都具有OnCommand
和CommandArgument
属性,这些属性在绑定期间填充(通过添加OnRowDataBound
回调进行检查以在绑定期间进行检查。<a id="MainContent_UserGrid_ManageUserLink_0" title="Manage User" href="javascript:__doPostBack('ctl00$MainContent$UserGrid$ctl02$ManageUserLink','')">Manage</a>
GridView
的OnRowCommand属性,并且该函数存在于回调中请告知为什么这个非常简单的例子不再起作用 我正在使用.NET Framework 4.6。 感谢。
答案 0 :(得分:0)
仅供参考,我将您的代码复制到我的一个Web窗体应用程序中,并且工作正常。我在网格和其他中继器中看到了eval
声明行为。
您是否尝试过对CommandArgument
值进行硬编码以查看是否会发生任何变化?