我有一个包含GridView的ASPX页。我希望能够从网格中选择一行,并基于所选行填充该页的另一部分。如果在〈%@ Page %〉行中设置EnableEventValidation=“false”,该功能就可以正常工作,但我被告知由于安全问题而无法使用该功能。如果不包含该功能,选择网格行会引发“回发或回调参数无效”异常。
如何在不禁用事件验证的情况下实现行选择?
下面是我的代码:
ASPX页面:
<asp:GridView runat="server" ID="TheGrid" AutoGenerateColumns="false" DataKeyNames="id" EmptyDataText="No Data Found" AllowSorting="true">
<Columns>
<asp:BoundField DataField="FirstName" HeaderText="First Name" ReadOnly="true" SortExpression="FirstName" />
<asp:BoundField DataField="LastName" HeaderText="Last Name" ReadOnly="true" SortExpression="LastName" />
<asp:BoundField DataField="Email" HeaderText="Email" ReadOnly="true" SortExpression="Email" />
</Columns>
</asp:GridView>
ASPX.VB代码:
Protected Sub TheGrid_RowDataBound(sender As Object, e As GridViewRowEventArgs) Handles TheGrid.RowDataBound
If e.Row.RowType = DataControlRowType.DataRow Then
e.Row.Attributes("onclick") = Page.ClientScript.GetPostBackClientHyperlink(TheGrid, "Select$" & e.Row.RowIndex)
e.Row.Attributes("style") = "cursor:pointer"
End If
End Sub
Protected Overrides Sub Render(writer As HtmlTextWriter)
ClientScript.RegisterForEventValidation("TheGrid")
MyBase.Render(writer)
End Sub
请注意,当我选择一行时,在Page_Load和Render之间的某个位置引发了异常。
1条答案
按热度按时间ctehm74n1#
好吧,让我们用两种方式连接GV。
第一种方法,在平面上放置一个jane按钮,用于行单击(我们将在第二个示例中删除按钮并添加行单击)。
那么,假设这个简单GV
注意我们是如何在飞机上降落的简巴顿。
我们的代码是这样的:
现在我们有了这个:
好的,接下来的部分是放入一个“div”区域,允许编辑一行。
简控制了很多计划。
并且我们可以在编辑时“隐藏”网格,并显示编辑区域div。
但是,我经常使用jQuery. UI。实际上与简单的hide/show代码非常相似,但是jQuery.UI将相同的div转换为一个漂亮的弹出区域。
因此,div区域可能如下所示:
等等等等等等。
所以,现在让我们把上面的按钮连接起来。
按钮将简单:
获取当前网格行
获取主键id
加载div并显示。
代码如下:
如前所述,我从jQuery.UI添加了一个弹出窗口,但我们可以只使用普通的jane“div”,隐藏/显示网格并显示编辑区域(或者像您一样,让编辑区域处于全视图状态)。
(fLoader是我前段时间构建的一个例程--我喜欢每个人都变得非常厌倦了一遍又一遍地键入代码来填写文本框等,所以对于任何文本框等,我使用一个名为f=“数据库列名”的“组成”属性,该例程只会循环表单上的控件并填写它们。这与手工编写简单的控件赋值没有什么不同,但是有了这段代码,我可以反复使用它。
于是,我们现在看到,得到这样的结论:
好了,接下来的唯一目标是添加一个行单击(而不是使用编辑按钮)。
因此,我们所需要的就是一个例程,它将获取当前行索引,并调用上面的编辑行例程。
因此,我们使用行数据绑定,并以这种方式添加click事件。
但是,请注意上面的按钮点击是如何得到当前行的。这段代码很短,适用于repeaters,listview等(我们使用了命名容器)。
但是,如果您想要一行单击来代替该按钮呢?
然后在数据行数据绑定上,添加以下代码:
在页面加载事件中,我们有以下内容:
下面是一个很好的例程,它根据我上面使用的SQL返回一个表:
所以,总而言之,代码不多。
您可以在此处尝试上面的工作示例:
http://www.kallal.ca/Website11/WebForm2