我有一点问题。我目前正在制作一个网页,每页都有几个下拉列表。下拉列表的目的是过滤 YUI 数据表中的信息,以及彼此的信息,例如。不同的地点会有不同的商品等。
我制作了一个通用函数来从数据库中读取选项 ID 和值,但是可以通过 3 种方式使用这些信息。目前,当页面加载时,我创建了一个加载下拉列表的 Asp:Placeholder。如果 Ajax 请求信息来更新选择框,我将连接一个 HTML 字符串服务器端并 response.write 它。但是现在我的客户要求查找下拉框中的列表是否太长,我正在使用 YUI 模态面板和 YUI 网格进行查找。我仍然想使用相同的数据获取子过程,但这次我想将数据作为 JSON 字符串发回。
目前我有布尔标志来表明它是页面初始加载以创建占位符,还是更新加载以创建 HTML 字符串,但我更愿意将“信息呈现/格式化”子过程作为参数传递,这消除了需要几个布尔标志。
我的代码
公共共享子 LoadCoop(ByRef PlaceHolder 作为对象,ByVal SearchCriteria 作为字符串,ByVal 数据库作为字符串,ByVal InitialLoad 作为布尔值) 将 SqlConnection 暗淡为新的 SqlConnection 将 SqlCommand 调暗为新的 SqlCommand 将 SqlParameter 调暗为新列表(SqlParameter 的) 将 SqlReader 调暗为 SqlDataReader = 无 将 FilterList 调暗为新列表(FilterObject 的) 尝试 SqlConnection = CreateDatabaseConnection(ConnectionString) AddSqlParameterToCollection(SqlParameter, "@SearchCriteria", SearchCriteria) AddSqlParameterToCollection(SqlParameter,“@Database”,数据库) SqlCommand = CreateSqlCommand("[proc_Dynamic_GetCoop]", SqlConnection, SqlParameter) SqlReader = SqlCommand.ExecuteReader If SqlReader.HasRows Then Do While SqlReader.Read 将 TempFilterObject 调暗为 FilterObject = 新的 FilterObject TempFilterObject.ID = SqlReader("PSCM_COOP_ID") TempFilterObject.Description = SqlReader("PSCM_COOP_ID") FilterList.Add(TempFilterObject) 环形 万一 如果 InitialLoad = True 那么 CreateHTMLSelectContainer(PlaceHolder, FilterList, "Coop") 别的 CreateHTMLSelectString(FilterList, "Coop") 万一 抓住前任作为例外 HttpContext.Current.Response.Write("ERROR - 加载合作过滤器时出错。请联系系统管理员寻求帮助。") 最后 If Not IsNothing(SqlReader) 则 SqlReader.Close() SqlReader = 无 万一 If Not IsNothing(SqlCommand) Then SqlCommand.Dispose() SqlCommand = 无 万一 If Not IsNothing(SqlConnection) 则 SqlConnection.Close() SqlConnection.Dispose() SqlConnection = 无 万一 结束尝试 结束子 公共共享子 CreateHTMLSelectContainer(ByRef PlaceHolder 作为对象,ByVal 过滤器列表作为列表(过滤器对象),ByVal ID 作为字符串) 将 ReturnString 调暗为 String = "" 对于FilterList中的每个Obj作为FilterObject ReturnString += "开始选项标签" & Obj.Description & "结束选项标签" 下一个 将容器变暗为新 HtmlGenericControl("select") Container.ID = "ddl" & ID Container.Attributes.Add("class", "filtering_fields_select") Container.InnerHtml = ReturnString PlaceHolder.Controls.Add(容器) 如果 FilterList.Count > 20 则 PlaceHolder.Controls.Add(New LiteralControl("查找图像到这里")) 万一 结束子 Public Shared Sub CreateHTMLSelectString(ByVal FilterList As List(Of FilterObject), ByVal ID As String) Dim ReturnString As String = "打开选择标签" 将 Obj 调暗为 FilterObject = 无 对于 FilterList 中的每个 Obj ReturnString += "开始选项标签" & Obj.Description & "结束选项标签" 下一个 ReturnString += "关闭选择标签" 如果 FilterList.Count > 20 则 ReturnString += "查找图片放在这里" 万一 HttpContext.Current.Response.Write(ReturnString) 结束子