ASP.NET中如何在ListView服务器标签属性中使用后台代码变量
我在ASP.NET Web应用中使用ListView控件,通过SQL查询绑定SQL Server数据,需要将后台代码中声明为public的SearchIn变量赋值给ListView内的HiddenFieldSearch控件的Value属性。尝试用<asp:HiddenField ID="HiddenFieldSearch" runat="server" Value="Eval<%# SearchIn%>" />无效,求解决办法。
方法一:直接使用数据绑定表达式
Eval用于绑定数据源中的字段,而SearchIn是页面级的public成员变量,直接用<%# %>表达式即可完成绑定,无需额外调用Eval。
修改前台的HiddenField代码:
<asp:HiddenField ID="HiddenFieldSearch" runat="server" Value='<%# SearchIn %>' />
注意:确保SearchIn变量在ListViewSearchResults.DataBind()执行前已经被正确赋值,数据绑定表达式会在DataBind()阶段计算取值。
方法二:通过ListView的ItemDataBound事件赋值
如果需要更灵活的控制逻辑(比如根据列表项动态调整值),可以通过ItemDataBound事件找到目标控件并赋值。
1. 修改前台ListView标记
添加OnItemDataBound事件绑定:
<asp:ListView ID="ListViewSearchResults" runat="server" OnItemDataBound="ListViewSearchResults_ItemDataBound"> <ItemTemplate> <!-- 其他控件代码保持不变 --> <asp:HiddenField ID="HiddenFieldSearch" runat="server" /> </ItemTemplate> </asp:ListView>
2. 后台实现事件方法
protected void ListViewSearchResults_ItemDataBound(object sender, ListViewItemEventArgs e) { // 仅处理数据项,忽略表头/表尾等非数据项 if (e.Item.ItemType == ListViewItemType.DataItem) { HiddenField hiddenField = e.Item.FindControl("HiddenFieldSearch") as HiddenField; if (hiddenField != null) { hiddenField.Value = SearchIn; } } }
额外提示:修复SQL注入风险
你的SQL语句存在严重的SQL注入漏洞,建议改用参数化查询:
string strsqlLike = "SELECT TbAye.NumberAye, TbAye.IdAye, TbAye.TextAye, TbSoore.NameSoore, TbSoore.IdSoore, TbTarjome.TextTarjome " + "FROM TbAye " + "INNER JOIN TbTarjome ON TbAye.IdAye = TbTarjome.IdAye " + "INNER JOIN TbSoore ON TbAye.IdSoore = TbSoore.IdSoore " + "WHERE FreeText(@SearchIn, @SearchText)"; cmd = new SqlCommand(strsqlLike, con); cmd.Parameters.AddWithValue("@SearchIn", SearchIn); cmd.Parameters.AddWithValue("@SearchText", forwardedSearchText);
内容的提问来源于stack exchange,提问作者Zahra
相关产品推荐
相关产品推荐

