我有一个包含在UserControl中的C#/ ASP.net GridView。我现在拥有它的方式,gridview将添加一个onrowclick属性,如下所示:
protected void _gridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
e.Row.Attributes["onclick"] = Page.ClientScript.GetPostBackClientHyperlink(this.GridView, "EditRow$" + e.Row.RowIndex);
}
但是,当发生此单击事件时,由于EventValidation,我收到无效的回发错误。此外,我在行上的按钮使用GridViewRowCommands重定向到其他页面。不幸的是,我无法让两者一起工作(RowCommand函数永远不会运行)。
例如,这是我将使用的处理程序:
protected void _gridView_RowCommand(object sender, GridViewCommandEventArgs e)
{
if (e.CommandName.ToString() == "EditRow" && e.CommandArgument.ToString() == "0")
Response.Redirect(anotherURL);
if (e.CommandName.ToString() == "BACK" && e.CommandArgument.ToString() == "0")
Response.Redirect(thisURL);
}
这是我在行上使用的按钮:
<asp:Button ID="_AddButton" runat="server" CommandName="BACK" CommandArgument="0" Text="Add" />
理想情况下,row-onclick也将使用此GridViewRowCommands,因此我可以在一个地方处理重定向。但是,我不知道该怎么做。有关更好方法的任何建议吗?
感谢您的继续支持!
答案 0 :(得分:0)
我不确定如何添加评论,所以答案必须这样做。
你是说它没有按照RowCommand方法发生什么?如果不是,我会考虑通过Page Init。以下列方式连接事件。
GridView1.OnRowCommand += _gridView_RowCommand
答案 1 :(得分:0)
在page指令中,添加以下内容:
EnableEventValidation="false";
之后应该可以正常工作。这可能是解决问题的最简单方法。
您也可以这样做:
e.Row.Attributes["onclick"] = "javascript:onRowClick('" + e.Row.RowIndex + "');";
在ASPX中,添加一个JavaScript函数:
onRowClick = function(rowIndex){
__doPostBack("<%=dataGridView1.UniqueID%>", rowIndex);
}
最后,在你的代码中,添加RaisePostBackEvent覆盖:
protected override void RaisePostBackEvent(IPostBackEventHandler source, string eventArgument)
{
base.RaisePostBackEvent(source, eventArgument);
int rowIndex = ToInt32.Parse(eventArgument);
if (source is DataGridView)
{
if (source == dataGridView1)
{
GridViewRow row = dataGridView1.Rows[rowIndex];
}
}
}
答案 2 :(得分:0)
我通过在每一行附加客户端点击事件来处理类似的问题。
将OnRowDataBound事件处理程序添加到网格视图。
OnRowDataBound="GridView_RowDataBound
在OnRowDataBound事件处理程序中,添加一个“onclick”属性,该属性抓取记录的主键并在重定向URL中传递它。
protected void GridView_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow)
{
int id = Convert.ToInt32(e.Row.Cells[0].Text);
e.Row.Attributes["onclick"] = string.Format("javascript: window.location = 'Edit.aspx?id={0}'", id);
}
}
请注意,这假设您的网格视图的第一列是您的主键。