asp.net - 在 Gridview 中创建文本框并添加事件处理程序
问题描述
我正在尝试在我的 gridview 中添加一个“超级标题”行。看来我只能在代码隐藏中做到这一点。在标题中,我想添加一个文本框并附加一个 textchange 事件处理程序。但是,虽然代码生成标题行和文本框,但它似乎没有附加事件处理程序。这是我的代码:
Protected Sub GridViewBegroting_DataBound(ByVal sender As Object, ByVal e As EventArgs) Handles testGrid.DataBound
Dim myGridView As GridView = sender
If myGridView.Controls.Count > 0 Then
AddSuperHeader(myGridView)
End If
End Sub
Protected Sub AddSuperHeader(ByVal gridView As GridView)
Dim myTable As Table = gridView.Controls(0)
Dim cell As TableHeaderCell = MakeCell("Search", 4)
Dim tb As HtmlGenericControl = MakeTextBox()
Dim myNewRow As GridViewRow = New GridViewRow(0, -1, DataControlRowType.Header, DataControlRowState.Normal)
cell.Controls.Add(tb)
myNewRow.Cells.Add(cell)
myTable.Rows.AddAt(0, myNewRow)
End Sub
Protected Function MakeTextBox() As HtmlGenericControl
Dim div1 As HtmlGenericControl = New HtmlGenericControl("div")
Dim span1 As HtmlGenericControl = New HtmlGenericControl("span")
Dim tb As TextBox = New TextBox
AddHandler tb.TextChanged, AddressOf TestGridView_Search
tb.ID = "testSearchTextBox"
tb.Attributes("placeholder") = "Search Term"
div1.Controls.Add(span1)
div1.Controls.Add(tb)
Return div1
End Function
Protected Function MakeCell(Optional ByVal text As String = "", Optional ByVal span As Int32 = 1) As TableHeaderCell
Dim header As New TableHeaderCell()
header.ColumnSpan = span
header.Text = text
header.CssClass = "table-header"
Return (header)
End Function
Protected Sub TestGridView_Search(ByVal sender As Object, ByVal e As EventArgs)
Dim i As Integer = 0
End Sub
这会创建所有正确的控件,但不会触发事件。没有错误,但 TestGridView_Search 上的断点不会触发。此外,这是一个用户控件 (ASCX)。我已经尝试通过附加一个 javascript ajax 函数来做到这一点,但这似乎不适用于 ASCX 文件。
解决方案
ASP.NET 就是绑定到 .NET 框架的标准 HTML 网页。服务器正在处理您的代码。无论您编写什么代码,都需要用 js(inlc.jquery)和 html 编写。好吧,当我们使用 Visual Studio 在 ASP.NET 中编写代码时,我们看不到任何 js 或 html,除了我们在 .aspx 或代码隐藏文件中编写的内容。也就是说,因为服务器会处理我们编写的内容,并将必要的 js 和 html 添加到输出流中,然后发送到请求该页面的客户端。知道了,我们如何实现事件处理的思想或者一些html和js原生做不到的东西呢?通过进入通过 js 定义的状态回发到服务器。示例:当我们单击文本框文本并对其进行更改时,我们需要回发到服务器。从 asp 服务器编写的 js 和 html 为我们完成了所有这些工作。我们不必为此担心。我们只需要记住它的作用。默认情况下,文本框控件确实将回发设置为 false。因为,每当用户对其进行操作时,该页面的 js 都会进行回发。当我们不希望这样时,这不是一个好的用户体验。在您的情况下,这正是我们想要的。所以在我们的代码隐藏文件中(因为控件是在那里生成的),在控件声明处,我们可以将文本框属性 AutoPostBack 设置为 true。那应该有望解决您的问题。所以在我们的代码隐藏文件中(因为控件是在那里生成的),在控件声明处,我们可以将文本框属性 AutoPostBack 设置为 true。那应该有望解决您的问题。所以在我们的代码隐藏文件中(因为控件是在那里生成的),在控件声明处,我们可以将文本框属性 AutoPostBack 设置为 true。那应该有望解决您的问题。
例子:
textbox.AutoPostBack = True
问候,
马赫什瓦拉
推荐阅读
- spring-cloud - 从 spring restdocs 生成的 dslContract 不适用于 queryParameters
- angular - 如何从asp.net核心以角度显示图像
- c - 如何用一个字符替换多字符字符常量
- reactjs - 奇怪的 React 钩子行为,无法从函数访问新状态
- logging - Wildfly 10.0.0 Final 不记录已部署应用程序 WAR 的启动日志
- django - Django 模板渲染:使用标签与使用视图
- java - Java - 多场景的日期格式
- java - 尝试进行循环时出现字符串索引超出范围错误
- javascript - 打字稿-“调试器;” 在 Angular 中使用 QA 环境时语句不起作用
- sql-server - TFS 2018 需要哪个版本的 SQL Server 2016?